2013-12-16 2 views
2

Feature Extraction & Image Processing에서 코드를 받았습니다. 저는 Matlab의 초보자이므로이 코드를 실행하여 결과를 보는 방법을 모르겠습니다. 완료 되었습니까?Hough Transform Matlab - 어떻게 표시하나요?

먼저 하나 (호우 나 이미지가 Elipses

에 대한
%Hough Transform for Ellipses 
function HTEllipse(inputimage,a,b) 

%image size 
[rows,columns]=size(inputimage); 

%accumulator 
acc=zeros(rows,columns); 

%image 
for x=1:columns 
    for y=1:rows 
    if(inputimage(y,x)==0) 
     for ang=0:360 
     t=(ang*pi)/180; 
     x0=round(x-a*cos(t)); 
     y0=round(y-b*sin(t)); 
     if(x00 & y0< rows & y0>0) 
      acc(y0,x0)=acc(y0,x0)+1; 
     end 
     end 
    end 
    end 
end 

변환 : 호우가 원

%Hough Transform for Circles 
function HTCircle(inputimage,r) 

%image size 
[rows,columns]=size(inputimage); 

%accumulator 
acc=zeros(rows,columns); 

%image 
for x=1:columns 
    for y=1:rows 
    if(inputimage(y,x)==0) 
     for ang=0:360 
     t=(ang*pi)/180; 
     x0=round(x-r*cos(t)); 
     y0=round(y-r*sin(t)); 
     if(x00 & y00) 
      acc(y0,x0)=acc(y0,x0)+1; 
     end 
     end 
    end 
    end 
end 

셋째 하나 변환 : 호우가 라인

%Polar Hough Transform for Lines 
function HTPLine(inputimage) 

%image size 
[rows,columns]=size(inputimage); 

%accumulator 
rmax=round(sqrt(rows^2+columns^2)); 
acc=zeros(rmax,180); 

%image 
for x=1:columns 
    for y=1:rows 
    if(inputimage(y,x)==0) 
     for m=1:180 
     r=round(x*cos((m*pi)/180)+y*sin(m*pi)/180); 
     if(r0) acc(r,m)=acc(r,m)+1; end 
     end 
    end 
    end 
end 

1 초 동안 변환 png)이 프로그램을 실행할 필요가 있습니다. 그러나 나는 그것을 실행할 수 없습니다. 새 스크립트를 만들고 코드를 붙여넣고 기본 창에 매개 변수로 이미지 경로를 보내는 함수 이름을 실행합니다. 아무것도하지 않고 메시지도 없습니다.

답변

0

함수가 반환 값을 반환하지 않는다면 해당 함수에 반환 인수를 추가해야합니다 (hough trafo의 경우 누적 계산기 배열 acc을 반환하려는 경우). (또는 다른 스크립트에서) 명령 줄에서 다음과 같이 호출 또한 다음

function acc = HTPLine(inputimage) 

과 : 수동 (http://www.mathworks.de/de/help/matlab/ref/function.html)에 기능 헤더를 변경

IMG = imread('some_image.jpg'); 
% e.g. convert to grayscale: 
IMG = rgb2gray(IMG); 
acc = HTPLine(IMG); 

당신이 다음 여전히 최대를 찾을 필요 (또는 몇 가지 맥시마, 당신의 코드를 보면 내가 돈을 : n을

편집이 ... 누적에) 적합하고 그림 plot를 통해 자신의 적합 선 (타원/원)를 표시하는 방법을 많은 라인을 싶습니다 변수 r0이 무엇인지 알아야합니다!? 그럴거야. 어디에도 정의되어 있지 않으므로 오류를 줄 수 있습니다.

그리고 왜 코드에 if(inputimage(y,x)==0)이 있습니까? 현재 점의 픽셀은 그 단일 픽셀에 대한 hough 변환을 계산하기 위해 ordner의 black 일 필요는 없습니다. (흰색 선이있는 회색 이미지를 생각하면 -> 코드가 이미지로 아무것도하지 않을 것입니다 검은 색 픽셀을 포함하지 않음). 그래서 그것은 당신이 다시 생각해 볼 필요가있는 것입니다.

당신이, 당신은 또한 사용할 수 있습니다하려면

내장 된 MATLAB의 무릎 변환 : // http://www.mathworks.de/de/help/images/ref/houghpeaks.html

+0

http://www.mathworks.de/de/help/images/ref/hough.html 내가이에 R0을 변경합니다 : if (R 0) 책에있다. 당신이 언급 한 if 문을 제거한 후에, 나는 acc를 얻었다. 그러나 저는 그것이 선들만으로 이미지를 돌려주고 싶습니다. 여기를보십시오 : http://books.google.pl/books?id=97QebyNxyaYC&printsec=frontcover#v=onepage&q=false Page 200 - 결과 g, h, i - 선만 필요하며 이전 이미지를 찾을 필요가 없습니다. Btw, 내가 준 코드는 아래 2 페이지와 "if"문이 있습니다. wied : – Fengson

+0

독일에서 책 페이지를 볼 수는 없지만 신경 쓰지 않아도됩니다. 그래, 내가 말했듯이, 당신은 당신이 쉽게 음모를 꾸밀 수있는 선의 매개 변수를주는 누산기 배열에서 최대 값을 찾아야합니다. 그래서 당신은 스스로 최대 검색을하거나, houghpeaks 함수를 사용하여 검색을 수행하거나 여기에 허용 된 대답을보십시오. http://stackoverflow.com/questions/6680302/hough-transform-in-matlab – tim