MATLAB--数字图像处理 Hough变换

简介: MATLAB--数字图像处理 Hough变换

前言

Hough变换是1962年由Hough提出来的,用于检测图像中直线、圆、抛物线、椭圆等形状能够用一定函数关系描述的曲线。
在这里我们重点研究的是利用Hough变换检测图中的直线。

Hough变换原理之基础一

在这里插入图片描述
对于上图中的直线L,用常规方程表示
L: y=ax+b
那么用极坐标怎么表示呢?
对于任意的R,都有
R×cos(β-θ)=ρ
展开得
R×cosβcosθ+R×sinβsinθ=ρ
又x=R×cosβ y=R×sinβ(这个就不用解释了吧 高中知识了 O(∩_∩)O)
x×cosθ+y×sinθ=ρ
从这个极坐标表示的式子来看,是不是在一条直线上面所有的(x,y)都对应一个ρ、θ呢?
所以这个就是hough变换的:点-线对偶性
通俗的讲:在直角坐标系中的一条直线,在极坐标下,其实就是一个点,坐标为(ρ,θ)

Hough变换原理之基础二

在这里插入图片描述
由a、b两图:位于一条直线上的两点,在极坐标会产生一个交点,说明他们共线。
可是在直角坐标系中明明只有两个点,b图中反而是两条曲线?
在这里插入图片描述
对于任意一点,过该点有无数条直线,每条直线都有一个(ρ,θ)值,那么无数条直线,就会组成连续的(ρ,θ)值,就会构成极坐标系下的一条连续曲线。

这样,我们对一副图像所有点进行同样的操作,得到一副(ρ,θ)图像。
如果我们需要找出图像中最长的那条直线,那么肯定组成该直线的点最多,那么在极坐标系中肯定有个(ρ,θ)点是有最多条直线相交得到的。

如下图,利用函数就可以找到相交曲线数最多的一个点。
在这里插入图片描述
那么找到该点有什么用呢?
找到该点,就可以得到(ρ,θ)值、直线起始、终止点坐标。(MATLAB提供函数支持)

Hough变换原理之基础三

这里来说说,计算机是怎么由(ρ,θ)坐标图找到相交曲线最多的那个点。
首先,提供一个坐标轴
在这里插入图片描述
这里就说简单些:在基础二我们可以得出一个点在极坐标系下的一条曲线
然后我们对该曲线进行细分,分成很多个点(得到坐标)
在第一步提供的坐标轴里面,凡是前面分出来的点坐标,该位置的值就累加1
重复所有点,就可以得出一副累加图
如果需要找到曲线相交最多那个点,就只需要在该坐标轴中找到值最大的点坐标即可。

Hough变换原理总结

  1. 极坐标与直角坐标系变换
  2. 得出每个点在极坐标系的曲线(或直线)
  3. 在极坐标系绘画出所有曲线,利用累加的方法寻找需要的点
  4. 找到该点,得出(ρ,θ)、直线的起始点、终点坐标

利用Hought变换寻找图像中的最长直线

 I = imread('k3.png'); 
I=rgb2gray(I);
figure; 
subplot(131), imshow(I); 
 
% Rotate the image
rotI = I;
 
% Create a binary image
BW = edge(rotI, 'canny'); 
subplot(133), imshow(BW); 
 
% Create the hough transform using the binary image 
[H, T, R] = hough(BW); 
figure, imshow(H, [], 'XData', T, 'YData', R, 'InitialMagnification', 'fit'); 
xlabel('\theta'), ylabel('\rho'); 
axis on, axis normal, hold on;
colormap(gca, hot);
 
% Find peaks in the hough transform of the image
P = houghpeaks(H, 1); 
x = T(P(:,2));
y = R(P(:,1)); 
plot(x, y, 's', 'color', 'blue'); 
 
% Find lines and plot them
lines = houghlines(BW, T, R, P, 'FillGap', 5, 'MinLength', 7); 
figure, imshow(rotI), hold on; 
max_len = 0; 
for k = 1 : length(lines)  % here length(lines)=12
   xy = [lines(k).point1; lines(k).point2];    
   % Determine the endpoints of the longest line segment
   len = norm(lines(k).point1 - lines(k).point2); % distance between point1 and point2
   if ( len > max_len )
      max_len = len; 
      xy_long = xy; 
xy = [lines(k).point1; lines(k).point2]; 
   end
end
 plot(xy(:, 1), xy(:, 2), 'LineWidth', 2, 'Color', 'green');
   
   % Plot beginnings and ends of lines
   plot(xy(1,1), xy(1,2), 'x', 'LineWidth', 2, 'Color', 'yellow');
   plot(xy(2,1), xy(2,2), 'x', 'LineWidth', 2, 'Color', 'red'); 

结果
在这里插入图片描述

目录
相关文章
|
11月前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
11月前
|
算法
基于小波多普勒变换的回波信号检测matlab仿真
基于小波多普勒变换的回波信号检测matlab仿真
|
11月前
|
算法 计算机视觉
【MATLAB 】 EMD信号分解+希尔伯特黄变换+边际谱算法
【MATLAB 】 EMD信号分解+希尔伯特黄变换+边际谱算法
294 0
|
11月前
|
算法 计算机视觉
【MATLAB 】 EEMD 信号分解+希尔伯特黄变换+边际谱算法
【MATLAB 】 EEMD 信号分解+希尔伯特黄变换+边际谱算法
1080 0
|
11月前
|
机器学习/深度学习 并行计算 算法
霍夫变换椭圆检测(matlab仿真与图像处理系列第2期)
霍夫变换椭圆检测(matlab仿真与图像处理系列第2期)
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于sift变换的农田杂草匹配定位算法matlab仿真
本项目基于SIFT算法实现农田杂草精准识别与定位,运行环境为Matlab2022a。完整程序无水印,提供详细中文注释及操作视频。核心步骤包括尺度空间极值检测、关键点定位、方向分配和特征描述符生成。该算法通过特征匹配实现杂草定位,适用于现代农业中的自动化防控。
|
2月前
|
算法
基于小波变换和峰值搜索的光谱检测matlab仿真,带GUI界面
本程序基于小波变换和峰值搜索技术,实现光谱检测的MATLAB仿真,带有GUI界面。它能够对CO2、SO2、CO和CH4四种成分的比例进行分析和提取。程序在MATLAB 2022A版本下运行,通过小波分解、特征提取和峰值检测等步骤,有效识别光谱中的关键特征点。核心代码展示了光谱数据的处理流程,包括绘制原始光谱、导数光谱及标注峰值位置,并保存结果。该方法结合了小波变换的时频分析能力和峰值检测的敏锐性,适用于复杂信号的非平稳特性分析。
100 26
|
2月前
|
编解码 算法 数据安全/隐私保护
一维信号的小波变换与重构算法matlab仿真
本程序使用MATLAB2022A实现一维信号的小波变换与重构,对正弦测试信号进行小波分解和重构,并计算重构信号与原信号的误差。核心步骤包括:绘制分解系数图像、上抽取与滤波重构、对比原始与重构信号及误差分析。小波变换通过多分辨率分析捕捉信号的局部特征,适用于非平稳信号处理,在信号去噪、压缩等领域有广泛应用。
|
7月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于NSCT非采样轮廓波变换和CNN网络人脸识别matlab仿真
本项目展示了一种结合非采样轮廓波变换(NSCT)与卷积神经网络(CNN)的人脸识别系统。通过NSCT提取多尺度、多方向特征,并利用CNN的强大分类能力实现高效识别。项目包括ORL人脸库的训练结果对比,提供Matlab 2022a版本下的完整代码及详细中文注释,另有操作步骤视频指导。
|
10月前
|
算法 计算机视觉 异构计算
基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证
```markdown ## FPGA 仿真与 MATLAB 显示 - 图像处理的 FFT/IFFT FPGA 实现在 Vivado 2019.2 中仿真,结果通过 MATLAB 2022a 展示 - 核心代码片段:`Ddddddddddddddd` - 理论:FPGA 实现的一维 FFT/IFFT,加速数字信号处理,适用于高计算需求的图像应用,如压缩、滤波和识别 ```

热门文章

最新文章