【问题标题】:Hough Transform Matlab - how to display?霍夫变换 Matlab - 如何显示?
【发布时间】:2013-12-16 08:56:16
【问题描述】:

我从书 Feature Extraction & Image Processing 中得到了一个代码。 由于我是 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 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)。 但我似乎无法运行它。 我创建新脚本,粘贴代码,保存它并在主窗口中运行函数名称发送图像路径作为参数。它什么都不做,没有消息。

【问题讨论】:

    标签: matlab hough-transform


    【解决方案1】:

    您的函数不返回任何值,这意味着您必须为这些函数添加一个返回参数(如果是 hough 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应该是什么!?它会定义。给你一个错误消息,因为它没有在任何地方定义。

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

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

    【讨论】:

    • 我将 r0 更改为: if(r0) ,如书中所述。删除您提到的if语句后,我得到了acc。但我希望它只返回带有线条的图像。看这里:books.google.pl/… 第 200 页 - 结果 g、h、i - 我只需要线条,不需要上一张图片。顺便说一句,我给你的代码在下面两页,“if”语句在那里,奇怪:)
    • 我在这里看不到德国的书页,但没关系。是的,正如我所说,您需要在累加器数组中找到最大值,然后为您提供可以轻松绘制的线的参数。因此,您要么自己进行最大值搜索,要么使用 houghpeaks 函数进行搜索,还可以在此处查看接受的答案:stackoverflow.com/questions/6680302/hough-transform-in-matlab
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多