2012-09-19 2 views
0

에 나는 계산이 코드가 roundessRoundess은 matlab에

I = imread('http://energyfanatics.com/wp-content/uploads/2008/05/banana.jpg'); 
%I = imread('http://www.nyapplecountry.com/images/photosvarieties/redrome04.jpg'); 
pic = rgb2gray(I); 
threshold = graythresh(pic); 
bw = im2bw(pic,threshold); 
fbw = ones(size(bw))-imfill(ones(size(bw))-bw); 
invImg = ~fbw; 
imshow(invImg); 
f = bwlabel(invImg); 
S = regionprops(f,'Area','Perimeter','centroid'); 
res = (min(sqrt([S.Area]),[S.Perimeter]/4)./(max(sqrt([S.Area]), [S.Perimeter]/4))).^2; 

내가 점수에서 여러 값을 가지고,하지만 난 사과의 다른 사진을 사용할 때 난 단지 얻을 바나나의 사진을 사용할 때 내 문제가 하나의 가치. 문제는 뒤에 남겨진 잡음에 있습니다. sobel과 같은 일부 가장자리 감지 방법을 사용하려고했으나 가장자리 감지를 검정색 & 흰색 이미지와 결합 할 수 없습니다.

내 질문은 어떻게 과일의 가장자리를 감지하여 전체 과일을 얻고 소음을 없앨 수 있는지입니다. 나는 그저 과일의 원형을 얻고 싶다.

+0

: MATLAB 기능 edge 또한 구현이 http://stackoverflow.com/questions/12493320/determine-a-regions-average-in-matlab – 2thecore

답변

2

이것은 부분적인 대답 일뿐입니다. 가장 단순한 에지 검출기는 하이 패스 필터입니다. 하나를 사용하여 사진을 필터링 한 다음 가장자리의 위치를 ​​결정하기 위해 일종의 임계 값을 사용하십시오. 나는 이것을 잘 수행하는 방법을 기억하기에는 너무 녹슨하다. 그러나 다음과 같이된다.

hp_filt = [0 1 0; -1 0 1; 0 -1 0]; 

filtered_pic = conv2(orig_pic, hp_filt); 

edges = (filtered_pic > thresh); 

당신은 스스로 한계점을 찾아야 할 것이다.

불행히도, 나는 Matlab을 가지고 있지 않아도 작동하는지 확인할 수 있습니다.

1

fspecial은 사전 정의 된 SobelPrewitt 가장자리 감지 용 필터입니다. 더 간단하면서도 edge 기능을 사용하십시오. 물론 회색 음영 이미지에서 수행해야합니다.

이미지에서 가장자리를 감지 한 후 원형 모양 감지에 대해서 Hough transform을보고 싶을 수도 있습니다. hough은 직선 만 감지하는 것처럼 보이므로 원형 도형을 채택하는 방법을 찾아야합니다. 또는 기존 솔루션이 Matlab Central (1, 2)

P.S. 특정 접근을 위해 당신은 단지 지역 임계 값을 기반으로 regionprops에 의해 반환 된 개체를 필터링 할 수 있습니다, 다음과 같이 말한다 : Thr=100; S=S([S.Area]>Thr);

0

, 당신은 Canny Edge Detector을 사용할 수 있습니다 @Nathan Fellman@Victor K의 답을 보완. 이 방법은 다른 방법에 비해 잡음에 속지 않으며, 실제 약한 가장자리를 감지 할 가능성이 적습니다. coplete 코드를 찾을 수 있습니다

BW = edge(I,'canny') 
BW = edge(I,'canny',thresh) 
BW = edge(I,'canny',thresh,sigma) 
[BW,threshold] = edge(I,'canny',...)