您的位置:首页 > 编程语言 > MATLAB

canny算子和hough变换

2016-02-26 17:14 513 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Canny算子在matlab中的应用</span>


BW = edge(I,'canny')指定canny算法

BW = edge(I,'canny',thresh)中为canny算法指定敏感阈值,thresh是一个两值元素,第一个元素是小阈值,第二个元素是大阈值,如果指定一个thresh数值,则该值用来表示大阈值,0.4*thresh用来表示小阈值。如果没有指定thresh或者thresh为空,edge()函数自动选择大、小阈值,选择的thresh与图像的最大梯度幅值有关。

BW = edge(I,'canny',thresh,sigma)中的sigma作为高斯滤波器的标准偏差,默认的sigma值是sqrt(2) ,滤波器的大小根据sigma自动选择。

Hough变换在matlab中的应用

可以用于在图像中寻找直线、圆及其他简单形状的方法。

hough变换检测直线的matlab程序,如下

[H,theta,rho] = hough(BW);%调用hough函数,BW为事先读取的二值图像。
%用imshow显示hough变换
figure(3), imshow(imadjust(mat2gray(H)),[],'XData',theta,'YData',rho,...
'InitialMagnification','fit');
xlabel('\theta (degrees)'), ylabel('\rho');%设定坐标轴标签
axis on, axis normal, hold on;
colormap(hot) %设置矩阵图的颜色映射,

P = houghpeaks(H,4,'threshold',ceil(0.3*max(H(:))));%调用houghpeaks函数,H是hough矩阵,4是峰值个数

x = theta(P(:,2));%P的横坐标
y = rho(P(:,1));%P的纵坐标
plot(x,y,'s','color','green');

lines = houghlines(BW,theta,rho,P,'FillGap',30,'MinLength',80);%调用houghlines函数
% lines为结构数组,长度等于找到的线段数,结构中的每一个元素可以看作一条直线,并包含有下列字段
% point1:两元素向量[r1, c1],指定了线段起点的行列坐标。
% point2:两元素向量[r2, c2],指定了线段终点的行列坐标。
% theta:与线相关的霍夫变换的以度计量的角度。
% rho:与线相关的霍夫变换的ρ轴位置。
% val1是正的标量,指定了与相同的霍夫变换相关的两条线段的距离。当两条线段之间的
% 距离小于指定的值时,函数houghlines把线段合并为一条线段(默认的距离是20个像
% 素)。参数val2是正的标量,指定合并的线是保留还是丢弃。如果合并的线比val2指定
% 的值短,就丢弃(默认值是40)。
figure, imshow(I), hold on
max_len = 0;
for k = 1:length(lines)
x_y = [lines(k).point1; lines(k).point2];
%point1:两元素向量[r1, c1],指定了线段起点的行列坐标。
%point2:两元素向量[r2, c2],指定了线段终点的行列坐标。
plot(x_y(:,1),x_y(:,2),'LineWidth',2,'Color','green');
%xy(:,1)表示xy()的第一列元素,即起点和终点的横坐标
%xy(:,2)表示xy()的第二列元素,即起点和终点的纵坐标

% Plot beginnings and ends of lines
plot(x_y(1,1),x_y(1,2),'x','LineWidth',2,'Color','yellow');%起点
plot(x_y(2,1),x_y(2,2),'x','LineWidth',2,'Color','red');%终点

% Determine the endpoints of the longest line segment
len = norm(lines(k).point1 - lines(k).point2);%计算2范数,即两个点之间的距离
if ( len > max_len)
max_len = len;
xy_long = x_y;%把坐标点赋给xy_long
end
end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matlab canny hough