ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

matlab对倾斜图像的矫正

2022-08-19 23:00:56  阅读:145  来源: 互联网

标签:矫正 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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有