我从书中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)。 但我似乎无法运行它。 我创建新脚本,粘贴代码,保存它,并在主窗口中运行函数名称发送路径到图像作为参数。它什么都不做,没有任何消息。
答案 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