我从书Feature Extraction & Image Processing
中得到了一个代码。由于我完全是Matlab的初学者,我不知道如何运行这些代码来查看结果。它们完整吗?
第一个:线的Hough变换
%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
第三个:Elipses 的Hough变换
%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),我需要运行这些程序。但我似乎无法管理它。我创建了新的脚本,粘贴代码,保存它,然后在主窗口中运行函数名,将路径作为参数发送到图像。它什么都不做,没有消息等等。
您的函数不返回任何值,这意味着您必须向这些函数添加一个返回参数(在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
自行显示拟合的线(椭圆/圆)…
EDIT:查看您的代码,我不知道变量r0
应该是什么!?它会给你一个错误提示,因为它在任何地方都没有定义。
为什么在代码中使用if(inputimage(y,x)==0)
?当前点的像素不必是black
,就可以计算出单个像素的hough变换(只需想象一个带有白线的灰色图像->你的代码不会做任何事情,因为图像不会包含任何黑色像素)。所以这就是你需要重新思考的。
如果你愿意,你也可以使用MATLAB的内置hough变换:http://www.mathworks.de/de/help/images/ref/hough.html//http://www.mathworks.de/de/help/images/ref/houghpeaks.html