2013-12-16 71 views
2

我從書Feature Extraction & Image Processing得到了一個代碼。 由於我是Matlab的初學者,我不知道如何運行這些代碼來查看結果。 他們完成嗎?Hough變換Matlab - 如何顯示?

第一招:霍夫變換的線條

%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 

第二個:Hough變換爲圓

%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 

第三個:霍夫變換的省略號

%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 

我有圖片( PNG),我需要運行這些程序。 但我似乎無法運行它。 我創建新腳本,粘貼代碼,保存並在主窗口中運行函數名稱發送路徑作爲參數的圖像。它什麼也不做,沒有消息等等。

回答

0

你的函數不返回任何值,這意味着你必須爲這些函數添加一個返回參數(如果你想返回累加器數組acc),並且如手動(http://www.mathworks.de/de/help/matlab/ref/function.html),功能標題更改爲:

function acc = HTPLine(inputimage) 

,然後也從命令行調用它(或其他腳本):

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

,那麼你仍然需要找到最大(或幾個最大值,取決於o n您想要多少行,以適應)在蓄壓器,並通過plot在圖上顯示自己的擬合線(橢圓/圓)...

編輯:在你的代碼看,我不不知道變量r0應該是什麼!?它會確定。因爲它沒有被定義在任何地方,所以給你一個錯誤檢測。

爲什麼你在你的代碼中的if(inputimage(y,x)==0)?在當前點的像素不一定是black ordner來計算該單個像素的霍夫變換(只需考慮一個帶有白線的灰色圖像 - >您的代碼不會像圖像那樣做任何事情將不包含任何黑色像素)。所以這就是你需要重新思考的問題。

如果你願意,你也可以使用內置的MATLAB的霍夫變換:http://www.mathworks.de/de/help/images/ref/hough.html // http://www.mathworks.de/de/help/images/ref/houghpeaks.html

+0

我改變r0到這一點:如果(R 0)在這本書。刪除你提到的if語句後,我得到了acc。但是我希望它只用線條返回圖像。看看這裏:http://g3.s.tbtu.pl/books?id=97QebyNxyaYC&printsec=frontcover#v=onepage&q&f=false Page 200 - 結果g,h,i - 我只需要線條,不需要放棄之前的圖像。順便說一句,我給你的代碼是2頁下面和「如果」聲明在那裏,更奇怪:) – Fengson

+0

我不能在德國這裏看書頁,但從來不知道。是的,正如我所說的,您需要在累加器數組中找到最大值,然後給出您可以輕鬆繪製的線的參數。所以要麼你自己做最大值搜索,要麼通過使用houghpeaks函數來做到這一點,也請看這裏接受的答案:http://stackoverflow.com/questions/6680302/hough-transform-in-matlab – tim