2016-08-26 6 views
3

나는 이미지를 배경에서 제거하고 객체를 탐지해야하는 프로젝트를 만들고있다.안드로이드 엣지 감지 opencv

나는 가장자리 탐지와 윤곽선을 찾는 것보다 마스크 된 이미지에 윤곽선을 그리는 것보다 재능있는 에지 탐지를 사용하고있다.

대못 가장자리 감지의 경우 임계 값 매개 변수에 대해 otsu의 방법으로 임계 값을 높이거나 낮추려고했으나 적절한 결과를 얻지 못했습니다. 또한, 나는 픽셀 값의 평균을 발견하고도 정확한 결과를 제공하지 않습니다

double high_threshold = 1.33 * d; 
double low_threshold = 0.66 * d; 

을 찾는 노력했다. 내가

Mat rgba = new Mat(); 
Utils.bitmapToMat(bitmap, rgba); 
Mat edges = new Mat(rgba.size(), CvType.CV_8UC1);Imgproc.cvtColor(rgba, edges, Imgproc.COLOR_RGB2GRAY, 4); 
Imgproc.GaussianBlur(edges, edges, new Size(3,3), 2); Mat thresh=new Mat(); 
double upper_threshold = Imgproc.threshold(edges,thresh,0,255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C| Imgproc.THRESH_OTSU); 
double lower_threshold = 0.1*upper_threshold;Imgproc.Canny(edges,edges,upper_threshold,lower_threshold,3,false);Mat mDilatedMat = new Mat(); 

Mat Meroded = new Mat(); 
double erosion_size=5; 
double dilation_size=4; 
Mat e= Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(2*erosion_size + 1, 2*erosion_size+1)); 
Mat f= Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(2*dilation_size + 1, 2*dilation_size+1)); 
Imgproc.dilate(edges, mDilatedMat,e); 
Imgproc.erode(mDilatedMat, Meroded,f); 
+0

check [this] (http://stackoverflow.com/questions/9191762/i-want-to-detect-objects 다른 사람 - 페이지 - 그래서 - 누구 - w) 도움이 – Nikhil

+0

사실 실제로 가장자리 감지에 문제가 있고, 기본적으로 내가 임의의 이미지의 가장자리를 감지해야하므로 모양을 원 ' 해결책이 될 수 없다. 실제로 나는 그레이 스케일로 이미지를 변환하고 있을지도 모른다. 어쩌면 강도의 문제가있다 .. – shreya

+0

다른 엣지 디텍터를 사용해 보셨습니까? LoG와 마찬가지로 –

답변

0

을 할 수있는 그 밖의 무엇을 당신은 당신의 이미지 소블, 검소한 또는 가장자리 연결 알고리즘을 적용하여 다른 알고리즘에 의해 추출 향상시킬 수 있습니다. 많은 가장자리 연결 알고리즘은 hough 변환, 개미 식민지 알고리즘 등을 사용할 수 있습니다.

+0

이봐 요, 응답 해 주셔서 감사합니다. 나는 그라운드에서의 배경과 배경의 강도가 그레이 스케일 이미지에서 거의 같은 단계에서 문제가 생기므로, canny 방법은 어떤 edge도 감지하지 못합니다. @자유민 – shreya