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
相关文章推荐
- 解析在main函数之前调用函数以及对设计的作用详解
- java和matlab画多边形闭合折线图示例讲解
- C#调用Matlab生成的dll方法的详细说明
- 从java中调用matlab详细介绍
- 稀疏自动编码器 (Sparse Autoencoder)
- VC++与Matlab混合编程的快速实现
- Matlab 矩阵运算
- matlab与opencv部分函数的对照
- matlab神经网络工具箱创建神经网络
- Matlab
- MATLAB 入门教程
- matlab函数_连通区域
- MATLAB中函数模式和命令模式的区别
- MATLAB 添加自定义的模块到simulink库浏览器
- MATLAB for Mac使编辑器支持中文
- [转]matlab中plot用法
- 初学数模-MATLAB Quick Start! Part I
- 初学数模-MATLAB Quick Start! Part II
- matlab程序优化以及eclipse与github的结合
- matlab中的rand函数(用于产生随机数)