标签:矫正 180 BW matlab rho 图像 theta rhomax row
I=imread('附件B.PNG'); f=rgb2gray(I);%灰度化 BW=edge(f,'canny'); %edge:以灰度图像为输入,'canny'为边缘检测算子 % 输出BW为二值图像,边缘处为白(255)其余部分为黑(0) [row,col]=size(BW); rhomax=round((row*row+col*col)^0.5);%计算对角线距离 A=zeros(2*rhomax,180); %这里,实际上rho的取值范围为[-rhomax,rhomax], %但是为了后面进行数量统计,转变为[1,2rhomax] for m=1:row for n=1:col if BW(m,n)~=0 %判断为边缘 for theta=1:180 r=theta/180*pi; %角度转换 rho=round(m*cos(r)+n*sin(r)); %Hough变换 rho=rho+rhomax+1; %坐标平移 %这里的理解,首先matlab中数组是从1开始计数,所以+1; %数组坐标不能<0,所以 +rhomax A(rho,theta)=A(rho,theta)+1; %数量统计 end end end end [rho,theta]=find(A>250); %超过250个点视为共线,rho列号,theta行号,这个值可以自己设置,为了只检测到一条直线就设高了,不同图可以设置不同值 nma=length(rho) figure for i=1:nma hold on m=1:row; r=theta(i)/180*pi; n=(rho(i)-rhomax-m*cos(r))/(0.0001+sin(r)); plot(n,m,'w-','LineWidth',6); end title('hough线检测'); if theta>90 qingxeijiao=180-theta; else qingxeijiao=-theta end I2 = imrotate(I,qingxeijiao,'bilinear','crop'); subplot(1,3,1);imshow(I);title('原始图像') subplot(1,3,2);imshow(f);title('二值化图像') subplot(1,3,3), imshow(I2); title('倾斜校正');
结果显示:
标签:矫正,180,BW,matlab,rho,图像,theta,rhomax,row 来源: https://www.cnblogs.com/kuangxinru/p/16604332.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。