数字图像处理Hough变换直线检测matlab实现
Hough变换直线检测MatLab代码.doc

Hough变换直线检测MatLab代码function Img_hough = hough_s(Img, bw)%该函数实现hough变换提取直线的功能。
%输入图像x,运行Z后直接画出直线。
%选择进行Hough变换的图像行%Img为原图像;bw为边缘图像%%[H,W,D]=size(Img);Img_hough = Img;讦D==lchannel = Img_hough;Img_hough = cal(3,channel, channel, channel); end[M,N]=size(bw);%求出图像大小。
%%dtheta=l;drho=l;md=ceil((N+round(sqrt(M A2+N A2)))/drho);%确定网格的最大区域。
ma=ceil(l 8O/dtheta); numrhotheta=zeros(md,ma);%产生计数矩阵。
coordrhotheta=cell( 1,1);% para=cell(l,3);❷II数组相当于c语言中的指针,可动态的改变大小。
for i=l:mdfor j=l:macoordrhotheta{ i,j}=[J;endend%产生空网格。
ymin = 5;ymax = M - 4;for i=ymin:ymaxforj=l:Nif bw(i,j) == 1for k=l:marho=round((j *cos(dtheta*k*pi/180)+i*sin(dtheta*k*pi/180))/drho); %根据直线的法线式表示,计算出平面上不同点的hough变换值。
rho=rho+ceil(N/drho);%可能的最大负值。
numrhotheta(rho+1 ,k)=numrhotheta(rho+1 ,k)+1;%将hough变换值相应位置的计数值加1。
coordrhotheta {rho+ l,k}=[coordrhotheta {rho+ l,k);[ij]];%记录hough变换值相应位置对应的点的坐标。
Hough变换直线检测MatLab代码

Hough变换直线检测MatLab代码一.function Img_hough = hough_s(Img, bw)%该函数实现hough变换提取直线的功能。
%输入图像x,运行之后直接画出直线。
%选择进行Hough变换的图像行%Img为原图像;bw为边缘图像%%[H,W,D]=size(Img);Img_hough = Img;if D==1channel = Img_hough;Img_hough = cat(3,channel, channel, channel); end[M,N]=size(bw);%求出图像大小。
%%dtheta=1;drho=1;md=ceil((N+round(sqrt(M^2+N^2)))/drho);%确定网格的最大区域。
ma=ceil(180/dtheta);numrhotheta=zeros(md,ma);%产生计数矩阵。
coordrhotheta=cell(1,1);% para=cell(1,3);�ll数组相当于c语言中的指针,可动态的改变大小。
for i=1:mdfor j=1:macoordrhotheta{i,j}=[];endend%产生空网格。
ymin = 5;ymax = M - 4;for i=ymin:ymaxfor j=1:Nif bw(i,j) == 1for k=1:marho=round((j*cos(dtheta*k*pi/180)+i*sin(dtheta*k*pi/180))/drho);%根据直线的法线式表示,计算出平面上不同点的hough变换值。
rho=rho+ceil(N/drho);%可能的最大负值。
numrhotheta(rho+1,k)=numrhotheta(rho+1,k)+1;%将hough变换值相应位置的计数值加1。
coordrhotheta{rho+1,k}=[coordrhotheta{rho+1,k};[i,j]];%记录hough变换值相应位置对应的点的坐标。
数字图像处理Hough变换直线检测matlab实现

数字图像处理—Hough 变换直线检测,matlab 实现实验八Hough 变换直线检测一、实验目的理解Hough变换的原理,了解其应用;掌握利用Hough变换进行直线检测的处理过程及编程方法。
二、实验内容利用Hough变换检测直线通常先进行边缘检测,得到只包含边缘的二值图像。
再通过Hough变换,在参数空间检测图像共线点的数量得到直线参数,从而实现直线检测。
1、读入图像(图像需有直线或直线性边缘) 2 、进行图像边缘,得到二值图像3、实现Hough变换,检测出图像中的直线方程4、输出结果三、实验要求1、编写代码,完成各项实验内容2、总结实验中遇到问题及解决方案,书写实验报告%Hougl变换clc;clear;close all f=imread('l in e.bmp'); % 若是彩色图片转灰度化if len gth(size (f) )>2f=rgb2gray(f);end%figure(1)subplot(121);imshow(f); % 利用edge函数进行边缘检测j=edge(f,'Sobel');subplot(122);imshow(j); [row,col]=size(j);pi nfan g=ro un d((row*row+col*colF0.5);A=zeros(2*pinfang,180);for m=1:rowfor n=1:colif j(m,n)>0for thera=1:180r=thera/180*pi; % 角度转弧度rho=round(m*cos(r)+n*sin(r));% p =cos 0 +sin 0rho=rho+pinfang+1;%-l:l 转换到1:2l+1A(rho,thera)=A(rho,thera)+1;endendendend[rho,the⑻二仙d(A>40);% 交点超过60条线的点,ma,na为参数空间的坐标点nma=length(rho);for i=1:nmahold onm=1:row;%rho=ma(i)-1;r=thera(i)/180*pi;n=(rho(i)-pinfang-m*cos(r))/(0.00001+sin(r));end。
hough变换 matlab例程

以下是一个简单的MATLAB例程,演示如何使用Hough变换来检测图像中的直线。
假设你已经有一个名为`image.jpg`的图像文件,你可以使用以下代码来进行Hough变换:读取图像I = imread('image.jpg');将图像转换为灰度图Igray = rgb2gray(I);执行边缘检测BW = edge(Igray, 'canny');执行Hough变换[H,theta,rho] = hough(BW);找到峰值P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));找到直线lines = houghlines(BW,theta,rho,P,'FillGap',5,'MinLength',7);绘制图像和检测到的直线figure, imshow(I), hold onfor k = 1:length(lines)xy = [lines(k).point1; lines(k).point2];plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');% 为每条直线绘制端点plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');end在这个例程中,我们首先读取图像,然后将其转换为灰度图像,并执行Canny边缘检测。
接下来,我们使用Hough变换来检测直线,并找到其中的峰值。
最后,我们使用`houghlines`函数找到图像中的直线,并将其绘制在原始图像上。
利用matlab进行图像检测--直线提取

H a r b i n I n s t i t u t e o f T e c h n o l o g y图像工程导论课程名称:图像工程导论设计题目:《图像检测:直线提取》院系:班级:设计者:学号:哈尔滨工业大学教务处图像工程导论任务书二〇一五年柒月哈尔滨工业大学一、课题详细描述:提取图像中所有长度>8,<80像素的水平、垂直和对角直线。
二、课题设计思路:读取图片后将其转化为灰度图后记为二值图像,对其进行边缘检测后通过霍夫变换检测直线,并将符合像素要求的水平、垂直和对角直线绘制在屏幕上。
三、代码清单及注释x=imread('D:2.jpg');%读取图片BW=rgb2gray(x);%转化为灰度图imshow(BW);thresh=[0.01,0.17];sigma=2; %定义高斯参数f=edge(double(BW),'canny',thresh,sigma);%canny边缘检测figure,imshow(f);[H,T,R]=hough(f,'ThetaResolution',89,'RhoResolution',10); %霍夫变换P=houghpeaks(H,400,'Threshold',80,'NHoodSize',[1,1]);lines=houghlines(f,T,R,P,'FillGap',1,'Minlength',8);for k = 1:length(lines)xy = [lines(k).point1; lines(k).point2];len = norm(lines(k).point1 - lines(k).point2);Len(k)=lenif ( len > 8& len < 80) %限定像素范围plot(xy(:,1),-xy(:,2),'LineWidth',2,'color','Red'); %绘制图像hold on;endend四、代码运行结果及自评所需处理的图片:处理结果:从图中可以看到本程序确是找到了满足要求的所有直线并将其呈现在了新的窗口中,完成了设计要求。
hough变换检测直线原理matlab

Hough变换是一种图像处理技术,它可以被用来检测图像中的直线。
Hough变换的原理是通过将图像空间中的像素点转换到参数空间中来对直线进行检测。
在参数空间中,每条直线都可以被表示为一组参数,如直线的斜率和截距。
在matlab中,可以使用hough变换来检测图像中的直线。
下面我们来介绍一下在matlab中如何使用hough变换来检测直线。
1. 预处理图像在使用hough变换之前,首先需要对图像进行预处理。
可以通过灰度化、边缘检测等处理方法来提取出图像中的直线信息,以便于后续的检测。
2. 进行hough变换在matlab中,可以使用函数hough来进行hough变换。
该函数的调用格式为:[H,T,R] = hough(BW)其中,BW是经过预处理的二值图像,H是hough变换的结果矩阵,T和R分别是参数空间中的角度和距离。
3. 检测直线在获得了hough变换的结果矩阵之后,可以使用函数houghpeaks来检测出图像中的直线。
该函数的调用格式为:P = houghpeaks(H,5)其中,H是hough变换的结果矩阵,5表示要检测的直线数量。
4. 获取直线参数一旦检测出了直线,就可以使用函数houghlines来获取直线的参数。
该函数的调用格式为:lines = houghlines(BW,T,R,P)其中,BW是经过预处理的二值图像,T和R分别是参数空间中的角度和距离,P是检测出的直线。
5. 绘制直线可以使用函数imshow来在原图上绘制出检测到的直线。
该函数的调用格式为:imshow(BW)hold onfor k = 1:length(lines)xy = [lines(k).point1; lines(k).point2];plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');endhold off通过以上步骤,就可以在matlab中使用hough变换来检测图像中的直线。
用matlab实现hough变换的直线检测.

用matlab实现hough变换的直线检测 RGB = imread('fenkuai.bmp';%jaynes-thesis I=rgb2gray(RGB; % 图片用的是灰度图像, [x,y]=size(I; BW=edge(I;figure;imshow(I;title('原图' figure;imshow(BW;title('边缘检测图像'rho_max=floor(sqrt(x^2+y^2+1; %由原图数组坐标算出ρ最大值,并取整数部分加1 %此值作为ρ,θ坐标系ρ最大值 accarray=zeros(rho_max,180; %定义ρ,θ坐标系的数组,初值为0。
%θ的最大值,180度 Theta=[0:pi/180:pi]; %定义θ数组,确定θ取值范围 for n=1:x, for m=1:y if BW(n,m==1 for k=1:180 %将θ值代入hough变换方程,求ρ值 rho=(m*cos(Theta(k+(n*sin(Theta(k; %将ρ值与ρ最大值的和的一半作为ρ的坐标值(数组坐标),这样做是为了防止ρ值出现负数rho_int=round(rho/2+rho_max/2; %在ρθ坐标(数组)中标识点,即计数累加accarray(rho_int,k=accarray(rho_int,k+1; end end end end %figure;colormap gray;%imagesc(accarray;title('hough变换后的图' %xlabel('\theta', ylabel('\rho'; %=====下面程序的显示效果没上面好=====% %accarray=uint8(accarray; %转换后会丢数据%figure;imshow(accarray;title('hough变换后的图' %xlabel('\theta', ylabel('\rho'; %axis on, axis normal, hold on; %=======利用hough变换提取直线======% %寻找100个像素以上的直线在hough变换后形成的点 K=1; %存储数组计数器 forrho_n=1:rho_max %在hough变换后的数组中搜索 for theta_m=1:180 ifaccarray(rho_n,theta_m>=10 %设定直线的最小值。
边缘检测与Hough变换实验报告Matlab

边缘检测与Hough变换实验目的:写一段代码实现一幅图像,其中分为以下两个步骤1.使用Matlab中的canny算子进行边缘检测,可以让使用者交互式的输入不同的Sigma的值实现边缘检测。
2.运用Hough变换来找到最突出的边缘,在图像中找到并画出最长的直线。
实验原理:canny算子边缘检测的基本原理是:采用二维高斯函数的任一方向上的一阶方向导数为噪声滤波器,通过与图像f(x,y)卷积进行滤波,然后对滤波后的图像寻找图像梯度的局部极大值,以确定图像边缘。
Canny边缘检测算子是一种最优边缘检测算子。
其实现步骤如下:1)用高斯滤波器平滑图像2)计算滤波后图像梯度的幅值和方向3)对梯度幅值应用非极大值抑制,其过程为找出图像梯度中的局部极大值点,把其他非局部极大值置零,以得到细化的边缘;4)再用双阈值算法检测和连接边缘;使用canny算子的edge函数调用格式为BW=edge(I,'canny');BW=edge(I,'canny',thresh,sigma);BW=edge(I,'canny',thresh);[BW,threshold]=edge(I,'canny',…);2.Hough变换时最常用的直线提取方法,它的基本思想是:将直线上每一个数据点变换为参数平面中的一条直线或曲线,利用共线的数据点对应的参数曲线相交于参数空间中一点的关系,使得直线提取问题转化为计数问题。
Hough变换提取直线的主要优点是受直线中的间隙和噪声影响较小。
Hough检测直线的Matlab实现:在Matlab图像处理工具箱中提供了3个与Hough变换有关的函数,分别为hough函数,houghpeaks函数和houghlines函数。
hough函数的调用格式为[H,theta,rho]=hough(BW);其中BW为二值图像,H为Hough变换矩阵,theta为变换轴间隔θ,rho为元素个数。
Houghpeaks函数是用来提取Hough变换后参数平面上的峰值点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理—Hough 变换直线检测,matlab 实现实验八Hough 变换直线检测
一、实验目的
理解Hough变换的原理,了解其应用;掌握利用Hough变换进行直线检测的处理过程
及编程方法。
二、实验内容
利用Hough变换检测直线通常先进行边缘检测,得到只包含边缘的二值图像。
再通过
Hough变换,在参数空间检测图像共线点的数量得到直线参数,从而实现直线检测。
1、读入图像(图像需有直线或直线性边缘) 2 、进行图像边缘,得到二值图像
3、实现Hough变换,检测出图像中的直线方程
4、输出结果
三、实验要求
1、编写代码,完成各项实验内容
2、总结实验中遇到问题及解决方案,书写实验报告
%Hougl变换
clc;clear;close all f=imread('l in e.bmp'); % 若是彩色图片转灰度化if len gth(size (f) )>2
f=rgb2gray(f);
end
%
figure(1)
subplot(121);imshow(f); % 利用edge函数进行边缘检测
j=edge(f,'Sobel');
subplot(122);imshow(j); [row,col]=size(j);
pi nfan g=ro un d((row*row+col*colF0.5);
A=zeros(2*pinfang,180);
for m=1:row
for n=1:col
if j(m,n)>0
for thera=1:180
r=thera/180*pi; % 角度转弧度
rho=round(m*cos(r)+n*sin(r));% p =cos 0 +sin 0
rho=rho+pinfang+1;%-l:l 转换到1:2l+1
A(rho,thera)=A(rho,thera)+1;
end
end
end
end
[rho,the⑻二仙d(A>40);% 交点超过60条线的点,ma,na为参数空间的坐标点nma=length(rho);
for i=1:nma
hold on
m=1:row;
%rho=ma(i)-1;
r=thera(i)/180*pi;
n=(rho(i)-pinfang-m*cos(r))/(0.00001+sin(r));
end。