前提・実現したいこと
javaで,複数の直線から交点を検出し,より多くの交点が検出された部分を認識させるプログラムを作成したいです.
今行っていること
現在,取り込んだ画像をCanny処理し,Hough変換をすることにより,
直線検出しました.
以下にコードを記します.
java
1public class HoughClass { 2 static{ 3 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 4 } 5 6 public static void main(String[] args) { 7 8 Mat src = new Mat();//SourceMat 9 Mat cdst= new Mat();//CannyDestinationMat 10 Mat cdstP= new Mat();//CannyColorDestinationMat 11 Mat gray= new Mat();//GrayMat 12 Mat canny=new Mat();//CannyEdgeMat 13 14 Mat lines= new Mat();//HoughlineMat 15 Mat linesP= new Mat();//HoughlinePMat 16 17 src = Imgcodecs.imread(path_in);//read image 18 19 //Check Input-Image 20 if(src.empty()) { 21 System.out.println("Error opening image!"); 22 System.exit(-1); 23 } 24 25 //ToGray 26 Imgproc.cvtColor(src,gray,Imgproc.COLOR_RGB2GRAY); 27 28 // Edge detection 29 Imgproc.Canny(gray, canny, 10, 50); 30 31 //Copy edges to the images that will display the results in BGR 32 Imgproc.cvtColor(canny, cdst, Imgproc.COLOR_GRAY2BGR); 33 cdstP= cdst.clone(); 34 35 // Standard Hough Line Transform 36 Imgproc.HoughLines(canny, lines, 1, Math.PI/360, 150); // runs the actual detection 37 // Draw the lines 38 for (int x = 0; x < lines.rows(); x++) { 39 double rho = lines.get(x, 0)[0], 40 theta = lines.get(x, 0)[1]; 41 double a = Math.cos(theta), b = Math.sin(theta); 42 double x0 = a*rho, y0 = b*rho; 43 Point pt1 = new Point(Math.round(x0 + 1000*(-b)), Math.round(y0 + 1000*(a))); 44 Point pt2 = new Point(Math.round(x0 - 1000*(-b)), Math.round(y0 - 1000*(a))); 45 Imgproc.line(cdst, pt1, pt2, new Scalar(0, 0, 255), 1, Imgproc.LINE_AA, 0); 46 } 47 48 // Probabilistic Line Transform 49 Imgproc.HoughLinesP(canny, linesP, 1, Math.PI/360, 50, 60, 10); // runs the actual detection 50 // Draw the lines 51 for (int x = 0; x < linesP.rows(); x++) { 52 double[] l = linesP.get(x, 0); 53 Imgproc.line(cdstP, new Point(l[0], l[1]), new Point(l[2], l[3]), new Scalar(0, 0, 255), 1, Imgproc.LINE_AA, 0); 54 } 55 } 56}
ここから行いたいこと
複数の直線が検出されましたが,交点検出には至っていません.
調べたところ,2つの直線の交点を求める記事はありましたが,
複数の直線の場合どうすればよいでしょうか?
ご教授願います.
回答2件
あなたの回答
tips
プレビュー