目录
1 概述
2 运行结果
3 参考文献
4 Matlab代码
霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。
霍夫变换采用类似于投票的方式来获取当前图像内的形状集合,该变换由Paul Hough(霍夫)于1962年首次提出。
最初的霍夫变换只能用于检测直线,经过发展后,霍夫变换不仅能够识别直线,还能识别其他简单的图形结构,常见的有圆、椭圆等。实际上,只要是能够用一个参数方程表示的对象,都适合用霍夫变换来检测。
代码分为以下部分:
主函数部分代码:
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
[1]代勤,王延杰,韩广良.基于改进Hough变换和透视变换的透视图像矫正[J].液晶与显示,2012,27(04):552-556.
部分理论引用网络文献,若有侵权联系博主删除。