hough函数编写matlab,hough图像处理并非使用matlab自带函数(容易理解)
%%能够运行close all;
clc;
I=imread('C:\Users\Administrator.GHTT-20141012XI\Desktop\lena.jpg');
[x,y]=size(I);
BW1= dither(I);
BW=edge(BW1,'canny');
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=(n*cos(Theta(k)))+(m*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');
% %=======利用hough变换提取直线======%
% %寻找100个像素以上的直线在hough变换后形成的点
K=1; %存储数组计数器
% case_accarray_n = zero(1000)
% case_accarray_m = zero(1000)
for rho_n=1:rho_max %在hough变换后的数组中搜索
for theta_m=1:180
if accarray(rho_n,theta_m)>100 %设定直线的最小值。
case_accarray_n(K)=rho_n; %存储搜索出的数组下标
case_accarray_m(K)=theta_m;
K=K+1;
end
end
end
% %把这些点构成的直线提取出来,输出图像数组为I_out
I_out=zeros(x,y);
for n=1:x,
for m=1:y
if BW(n,m)==1
for k=1:180
rho=(n*cos(Theta(k)))+(m*sin(Theta(k)));
rho_int=round(rho/2+rho_max/2);
%如果正在计算的点属于100像素以上点,则把它提取出来
for a=1:K-1
if rho_int==case_accarray_n(a)&k==case_accarray_m(a)%%%==gai==%%% k==case_accarray_m(a)&rho_int==case_accarray_n(a)
I_out(n,m)=BW(n,m);
end
end
end
end
end
end
figure;
imshow(I_out);title('利用经典hough变换提取的图像');
%%并不是hough检测直线
I=imread('C:\Users\Administrator.GHTT-20141012XI\Desktop\roadline.png');
I=rgb2gray(I);%彩色图象 to 二值图像
[m,n]=size(I); %获取维数
I=im2double(I); %便于计算 转成double
im=zeros(m,n);
%不懂这算子干嘛
for i=3:m-2
for j=3:n-2%处理领域较大,所以从图像(3,3)开始,在(m-2,n-2)结束
l(i,j)=-I(i-2,j)-I(i-1,j-1)-2*I(i-1,j)-I(i-1,j+1)-I(i,j-2)-2*I(i,j-1)+16*I(i,j)-2*I(i,j+1)-I(i,j+2)-I(i+1,j-1)-2*I(i+1,j)-I(i+1,j+1)-I(i+2,j);%LoG算子
end
end
[m,n]=size(l);
for i=2:m-1
for j=2:n-1
y(i,j)=l(i-1,j-1)+l(i-1,j)+l(i-1,j+1)+l(i,j-1)+l(i,j)+l(i,j+1)+l(i+1,j-1)+l(i+1,j)+l(i+1,j+1);
y(i,j)=y(i,j)/9; %LoG算子提取边缘后,对结果进行均值滤波以去除噪声,为下一步hough变换提取直线作准备
end
end
%换成整形
q=im2uint8(y);
[m,n]=size(q);
for i=1:m
for j=1:n
if q(i,j)>70; %设置二值化的阈值为70
q(i,j)=255; %对图像进行二值化处理,使图像边缘更加突出清晰
else
q(i,j)=0;
end
end
end
%Hough变换检测直线,使用(a,p)参数空间,a∈[0,180],p∈[0,2d]
a=180; %角度的值为0到180度
d=round(sqrt(m^2+n^2)); %图像对角线长度为p的最大值
s=zeros(a,2*d); %存储每个(a,p)个数
z=cell(a,2*d); %用元胞存储每个被检测的点的坐标
for i=1:m
for j=1:n%遍历图像每个点
if(q(i,j)==255)%只检测图像边缘的白点,其余点不检测
for k=1:a
p = round(i*cos(pi*k/180)+j*sin(pi*k/180));%对每个点从1到180度遍历一遍,取得经过该点的所有直线的p值(取整)
if(p > 0)%若p大于0,则将点存储在(d,2d)空间
s(k,d+p)=s(k,d+p)+1;%(a,p)相应的累加器单元加1
z{k,d+p}=[z{k,d+p} ,[i,j]];%存储点坐标
else
ap=abs(p)+1;%若p小于0,则将点存储在(0,d)空间
s(k,ap)=s(k,ap)+1;%(a,p)相应的累加器单元加1
z{k,ap}=[z{k,ap},[i,j]];%存储点坐标
end
end
end
end
end
for i=1:a
for j=1:d*2 %检查每个累加器单元中存储数量
if(s(i,j) >30) %将提取直线的阈值设为70
lp=z{i,j};%提取对应点坐标
for k=1:s(i,j)%对满足阈值条件的累加器单元中(a,p)对应的所有点进行操作
im(lp(1,k),lp(2,k))=255; %每个点R分量=255,G分量=0,B分量=0
end
end
end
end
subplot(1,2,1),imshow(I);title('原始图像');
subplot(1,2,2),imshow(im);title('hough变换边缘图像');
hough函数编写matlab,hough图像处理并非使用matlab自带函数(容易理解)相关推荐
- matlab图形图像处理论文,基于matlab图形图像处理技术-本科毕设论文.doc
基于matlab图形图像处理技术-本科毕设论文 基于MATLAB图形图像处理技术 摘 要 本文提出了一种基于MATLAB的数字图像处理技术的设计,系统中包括了图像处理技术的各个方面,涵盖了图像处理领域 ...
- 数字图像处理应用matlab,数字图像处理与应用(MATLAB版)
第 1章 绪论 1n 1.1 图像的概念 1n 1.2 图像的分类 2n 1.3 图像的表示 2n 1.3.1 图像信号的表示 2n 1.3.2 数字图像的表示 3n 1.3.3 颜色模型 4n 1. ...
- Matlab数字图像处理 01 图像数据的表示与基本运算
第一章 图像数据的表示与基本运算 1.1 读取和显示图像文件 1.2 图像类型与图像数据 1.2.1 RGB真彩色图像 1.2.2 索引图像 1.2.3 灰度图像 1.2.4 二值图像 1.2.5 视 ...
- 图像处理学习笔记之——Matlab数字图像处理
Matlab 数字图像处理 1.Matlab R2017b 简介 1.1.Matlab 软件环境 1.1.1.软件界面 1.1.2.Matlab 命令与程序 可以在 >> 提示符后面输入简 ...
- hough函数 matlab,matlab中hough函数
hough 变换提取直线(Matlab 实现) Hough 变换提取直线一.实验目标实现用 Hough 变换检测直线的算法二.实验内容 1.读入图像选取有较多直线及部分曲线以作对比的...... 基于 ...
- 【Matlab 常用图像处理函数 汇总】
Matlab 常用图像处理函数 汇总 一.图像的读取 二.图像的写入 三.图像的显示 四.创建窗口 五.图像的格式转换 六.灰度直方图 七.伽马变换 八.图像二值化 九.阈值变换 十.直方图均衡化 十 ...
- 【车道线检测】基于matlab Hough变换图片车道线检测 【含Matlab源码 276期】
⛄一.Hough变换图片车道线检测简介 1 引言 随着人们生活水平的提高, 科技的不断进步, 智能驾驶技术逐渐受到了研究者们的广泛研究和关注.先进驾驶辅助系统 (Advanced Driver Ass ...
- hough变换连接边缘matlab,hough边缘检测matlab
利用matlab进行图像检测--直线提取_数学_自然科学_专业资料.Harbin Institute of Technology 图像工程导论 课程名称: ...(BW),'canny',thresh ...
- 【车道线识别】基于matlab hough变换道路检测直线检测【含Matlab源码 2074期】
⛄一.Hough变换图片车道线检测简介 1 引言 随着人们生活水平的提高, 科技的不断进步, 智能驾驶技术逐渐受到了研究者们的广泛研究和关注.先进驾驶辅助系统 (Advanced Driver Ass ...
最新文章
- 实验室博士背着导师私发了两篇SCI,导师知道了会怎样?
- Oracle OS Block Header
- pytorch 实现transformer
- MATLAB从入门到精通:MATLAB矩阵操作
- 第三次学JAVA再学不好就吃翔(part59)--冒泡排序选择排序以及二分查找
- 一分二功率分配器_一文学会微波功率分配器
- Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的屏幕
- Qt:Windows编程—Qt实现进程管理
- 学生管理系统(简易)7/26
- oracle 11g Flashback Data Archive(闪回数据归档)
- Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列
- 2013蓝桥杯C++A:排它平方数(递归,枚举,暴力解法)
- centos6.5下iscsi多路径配置
- 浏览器打印设置横向打印_hp打印机共享怎么设置 hp打印机共享设置方法【详解步骤】...
- 安装mathtype打开word报错 mathtype.Dll cannot be found 解决方式
- JPA mappedBy、JoinColumn、FetchType.LAZY和FetchType.EAGER介绍
- 【小白篇】初探 Processing 色彩
- IT公司内推 互联网内推 bat内推
- blos硬盘启动台式计算机,电脑如何bios设置硬盘启动顺序?掌握这6大类型是关键!...
- iqos烟弹哪个最好抽?我品尝了十一种电子烟烟弹后告诉你