Radon变换实现对图像倾斜校正

参考博客

https://blog.csdn.net/akzc42847/article/details/102357885

建议先看上面链接参考博客。

radon原理
radon变换是一种倾斜坐标轴,计算不同角度的坐标轴下的线积分,当线积分有突变时,则认为存在直线。

如下图,是灰底画面中有一条黑色线段。
1.在红色坐标系中,沿x1轴方向进行积分,红色粗线是积分结果,可以看出,在x轴上某一点存在积分值激增。
2.在蓝色坐标系中,沿着x2轴方向进行积分,蓝色粗线是积分结果,可以看出,x轴上的积分结果相对平缓。

通过这样不断旋转坐标轴,可以确定黑线的倾斜角度。
在这里插入图片描述

计算步骤

  1. 读取图片
  2. 将彩色图像转换为灰度图像
  3. 对图像进行边缘检测(sobel、canny、laplace算子等)
  4. radon变换,角度检测
  5. 确定直线角度,并对原图进行旋转

结果展示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

clc;close all;

fileName='D:\LCD_Data\7_left.bmp';
srcImage=imread(fileName);
grayImage=rgb2gray(srcImage);
cannyImage=edge(grayImage,'canny');
figure(1);
subplot(121);imshow(srcImage);title('Orignal img');
% figure();;imshow(cannyImage);title('canny算子求边缘');

theta=0:180;
[R,x]=radon(cannyImage,theta);
figure;
imagesc(theta,x,R); %将矩阵值展示成图。imagesc(x,y,C) 指定图像位置。使用 x 和 y 可指定与 C(1,1) 和 C(m,n) 对应的边角的位置。要同时指定两个边角,请将 x 和 y 设置为二元素向量。要指定第一个边角并让 imagesc 确定另一个,请将 x 和 y 设为标量值。图像将根据需要进行拉伸和定向。
title('热力图  theta-X'); 
xlabel('theta(degree)'); 
ylabel('X\prime'); 
colormap(hot);  %以热力图方式展示
colorbar;%图例


[x,y]=find(R==max(max(R)))%x:截距 y:坐标轴与水平方向的夹角
rot_I=imrotate(srcImage,180-y,'loose'); %旋转图像
figure(1);subplot(122);imshow(rot_I);title('Radon变换');

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐