图像处理学习——基于霍夫变换(Matlab代码实现)

文章介绍了霍夫变换在图像中寻找形状的基本原理,包括直线检测和扩展到其他形状。它展示了MATLAB中实现的图像恢复方法,如逆滤波、维纳滤波以及颜色空间转换。此外,文章详细讨论了图像分割技术,如阈值分割、区域生长,并提供了MATLAB代码示例进行图像分割和合并。最后,提到了距离变换和分水岭变换在二进制图像斑点分割中的应用。
摘要由CSDN通过智能技术生成

 👨‍🎓个人主页:研学社的博客  

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。

霍夫变换采用类似于投票的方式来获取当前图像内的形状集合,该变换由Paul Hough(霍夫)于1962年首次提出。

最初的霍夫变换只能用于检测直线,经过发展后,霍夫变换不仅能够识别直线,还能识别其他简单的图形结构,常见的有圆、椭圆等。实际上,只要是能够用一个参数方程表示的对象,都适合用霍夫变换来检测。

代码分为以下部分​:

  1. 编写一个MATLAB程序,使用直接逆滤波来恢复退化的图像。
  2. 编写一个MATLAB函数,用于使用(a)恒定比率和(b)自相关函数实现线性图像恢复的维纳滤波。
  3. 编写一个MATLAB函数,将RGB颜色空间转换为HSI。显示色调图像、饱和度图像和强度图像。
  4. 编写MATLAB函数,对彩色图像的强度分量进行直方图均衡,得到新的HSI图像。将新的HSI图像转换回RGB。
  5. 使用霍夫变换检测二进制图像中的线段。
  6. 考虑一个由不重叠的小斑点组成的图像。基于阈值分割斑点。
  7. 考虑一个由不重叠的小斑点组成的图像。根据区域增长对斑点进行细分。
  8. 实现分割和合并过程,以分割具有四叉树区域的最小尺寸的不同值的图像。
  9. 考虑一个由小斑点组成的二进制图像。使用(a)距离变换和(b)分水岭变换对斑点进行分段。

📚2 运行结果

主函数部分代码:

function splitAndMerge()
    orgImg=imread('figXray.tif');
    md=input('Enter the minimum dimension of block: ');
    segImg=splitmerge(orgImg,md,@predicate);
    subplot(121);imshow(orgImg);title('Original Image');
    subplot(122);imshow(segImg);title('Segmented Image');
end
​
function g = splitmerge(f,mindim,fun)
    q=2^nextpow2(max(size(f)));
    [row,col]=size(f);
    f=padarray(f,[q-row,q-col],'post');
    z=qtdecomp(f,@split_test,mindim,fun);
    Lmax=full(max(z(:)));
    g=zeros(size(f));
    marker=zeros(size(f));
    for k=1:Lmax
        [vals,r,c]=qtgetblk(f,z,k);
        if ~isempty(vals)
            for i=1:length(r)
                xlow=r(i);
                ylow=c(i);
                xhigh=xlow+k-1;
                yhigh=ylow+k-1;
                region = f(xlow:xhigh,ylow:yhigh);
                flag=fun(region);
                if flag
                    g(xlow:xhigh,ylow:yhigh)=1;
                    marker(xlow,ylow)=1;
                end
            end
        end
    end
    g=bwlabel(imreconstruct(marker,g));
    g=g(1:row,1:col);
end
​
function flag=predicate(region)
    sd=std2(region);
    m=mean2(region);
    flag=(sd>10) & (m>0) & (m<125);
end
​
function v=split_test(b,mindim,fun)
    k=size(b,3);
    v(1:k)=false;
    for i=1:k
        quadregion=b(:,:,i);
        if size(quadregion,1)<=mindim
                v(i)=false;
        continue
        end
            flag=fun(quadregion);
        if flag
                v(i)=true;
        end
    end
end
​

🎉3 参考文献

[1]代勤,王延杰,韩广良.基于改进Hough变换和透视变换的透视图像矫正[J].液晶与显示,2012,27(04):552-556.

部分理论引用网络文献,若有侵权联系博主删除。

🌈4 Matlab代码实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值