%%能够运行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自带函数(容易理解)相关推荐

  1. matlab图形图像处理论文,基于matlab图形图像处理技术-本科毕设论文.doc

    基于matlab图形图像处理技术-本科毕设论文 基于MATLAB图形图像处理技术 摘 要 本文提出了一种基于MATLAB的数字图像处理技术的设计,系统中包括了图像处理技术的各个方面,涵盖了图像处理领域 ...

  2. 数字图像处理应用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. ...

  3. Matlab数字图像处理 01 图像数据的表示与基本运算

    第一章 图像数据的表示与基本运算 1.1 读取和显示图像文件 1.2 图像类型与图像数据 1.2.1 RGB真彩色图像 1.2.2 索引图像 1.2.3 灰度图像 1.2.4 二值图像 1.2.5 视 ...

  4. 图像处理学习笔记之——Matlab数字图像处理

    Matlab 数字图像处理 1.Matlab R2017b 简介 1.1.Matlab 软件环境 1.1.1.软件界面 1.1.2.Matlab 命令与程序 可以在 >> 提示符后面输入简 ...

  5. hough函数 matlab,matlab中hough函数

    hough 变换提取直线(Matlab 实现) Hough 变换提取直线一.实验目标实现用 Hough 变换检测直线的算法二.实验内容 1.读入图像选取有较多直线及部分曲线以作对比的...... 基于 ...

  6. 【Matlab 常用图像处理函数 汇总】

    Matlab 常用图像处理函数 汇总 一.图像的读取 二.图像的写入 三.图像的显示 四.创建窗口 五.图像的格式转换 六.灰度直方图 七.伽马变换 八.图像二值化 九.阈值变换 十.直方图均衡化 十 ...

  7. 【车道线检测】基于matlab Hough变换图片车道线检测 【含Matlab源码 276期】

    ⛄一.Hough变换图片车道线检测简介 1 引言 随着人们生活水平的提高, 科技的不断进步, 智能驾驶技术逐渐受到了研究者们的广泛研究和关注.先进驾驶辅助系统 (Advanced Driver Ass ...

  8. hough变换连接边缘matlab,hough边缘检测matlab

    利用matlab进行图像检测--直线提取_数学_自然科学_专业资料.Harbin Institute of Technology 图像工程导论 课程名称: ...(BW),'canny',thresh ...

  9. 【车道线识别】基于matlab hough变换道路检测直线检测【含Matlab源码 2074期】

    ⛄一.Hough变换图片车道线检测简介 1 引言 随着人们生活水平的提高, 科技的不断进步, 智能驾驶技术逐渐受到了研究者们的广泛研究和关注.先进驾驶辅助系统 (Advanced Driver Ass ...

最新文章

  1. 实验室博士背着导师私发了两篇SCI,导师知道了会怎样?
  2. Oracle OS Block Header
  3. pytorch 实现transformer
  4. MATLAB从入门到精通:MATLAB矩阵操作
  5. 第三次学JAVA再学不好就吃翔(part59)--冒泡排序选择排序以及二分查找
  6. 一分二功率分配器_一文学会微波功率分配器
  7. Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的屏幕
  8. Qt:Windows编程—Qt实现进程管理
  9. 学生管理系统(简易)7/26
  10. oracle 11g Flashback Data Archive(闪回数据归档)
  11. Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列
  12. 2013蓝桥杯C++A:排它平方数(递归,枚举,暴力解法)
  13. centos6.5下iscsi多路径配置
  14. 浏览器打印设置横向打印_hp打印机共享怎么设置 hp打印机共享设置方法【详解步骤】...
  15. 安装mathtype打开word报错 mathtype.Dll cannot be found 解决方式
  16. JPA mappedBy、JoinColumn、FetchType.LAZY和FetchType.EAGER介绍
  17. 【小白篇】初探 Processing 色彩
  18. IT公司内推 互联网内推 bat内推
  19. blos硬盘启动台式计算机,电脑如何bios设置硬盘启动顺序?掌握这6大类型是关键!...
  20. iqos烟弹哪个最好抽?我品尝了十一种电子烟烟弹后告诉你

热门文章

  1. ubuntu把终端信息输出到文本文件中的方法
  2. 防止安卓手机进入休眠状态 cpu停止 导致应用死掉
  3. 手机支付促零售模式革新踏平坎坷成坦途
  4. php活体检测,基于HTML5 的人脸识别活体认证的实现方法
  5. 出现”429:activex部件不能创建对象“解决办法
  6. 数据可视化的学习--概念
  7. 计算机类免费电子书共享
  8. 软件工程开发文档写作教程(05)—可行性研究报告写作规范
  9. android控件_textview
  10. Windows声音图标消失解决教程