Hough变换Matlab - 如何显示?

时间:2013-12-16 08:56:17

标签: matlab hough-transform

我从书中Feature Extraction & Image Processing获得了一段代码。 由于我是Matlab的初学者,我不知道如何运行这些代码来查看结果。 它们完整了吗?

第一个:Hough Transform for Lines

%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 Transform for Circles

%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变换为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

我有需要运行这些程序的图像(png)。 但我似乎无法运行它。 我创建新脚本,粘贴代码,保存它,并在主窗口中运行函数名称发送路径到图像作为参数。它什么都不做,没有任何消息。

1 个答案:

答案 0 :(得分:0)

您的函数不返回任何值,这意味着您必须为这些函数添加一个返回参数(如果是hof trafo,您希望返回累加器数组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);

然后您仍然需要在累加器中找到最大值(或几个最大值,具体取决于您想要拟合的线数),并通过plot自行显示拟合线(椭圆/圆)在一个数字......

编辑:看看你的代码,我不知道变量r0应该是什么!?它会def。给你一个错误的错误,因为它没有在任何地方定义。

为什么你的代码中有if(inputimage(y,x)==0)?当前点的像素不一定是ordner中的black来计算该单个像素的霍夫变换(只要想到带有白线的灰色图像 - >你的代码不会做任何事情,因为图像不包含任何黑色像素)。这就是你需要重新考虑的事情。

如果你愿意,你也可以使用MATLAB的内置霍夫变换:http://www.mathworks.de/de/help/images/ref/hough.html // http://www.mathworks.de/de/help/images/ref/houghpeaks.html