图片倾斜矫正处理(Hough Transform)

倾斜矫正原理及实现方式

代码连接:https://github.com/shuyeah2356/Image-Angel-correction/tree/main
倾斜矫正的实现原理:

使用霍夫变换检测图片中的直线;
计算直线与水平方向的倾斜角度;
最后根据角度旋转图片

实现步骤:

  1. 边缘检测,将图片转为灰度图,使用Canny边缘检测找到图片中的所有边缘
  2. 使用霍夫变换检测直线
  3. 计算角度:对于每一条直线计算其于水平线的角度,(可以用直线的极坐标表示中的角度得到)
  4. 角度平均:计算所有角度的中位数,用这个角度值来代表图片整体的倾斜角度
  5. 图片旋转:根据该角度对图片进行旋转

图片矫正效果:
在这里插入图片描述
在这里插入图片描述

Canny边缘检测

在边缘检测之前为什么转为灰度图?
1、简化处理,灰度图只有一个通道,而彩色图由三个通道,灰度图容易处理和分析,较少计算的复杂性;
2、降低数据量,灰度图只需要用一个字节来表示像素的亮度,而彩色图像需要三个值,使用灰度图能够减少数据量,节省存储空间;
3、对于边缘检测更关注图像中的边界纹理特征,不需要图片中的色彩信息。

Canny边缘检测的实现步骤

  1. 抑制噪声:通过高斯滤波对图像做平滑处理,滤除图像中的噪声,同时保留边缘的细节;
  2. 计算梯度的幅值和方向:使用sobel算子计算图像中每一个像素点的水平方向和垂直方向的梯度值,根据梯度值计算每一个像素点的梯度幅值和方向;
  3. 非极大值抑制:在计算得到的梯度幅值图上进行非极大值抑制,初步筛选边界;
  4. 双阈值方法:设置高阈值和低阈值,将图像中的像素点分为强边缘、弱边缘和非边缘。
    像素值的梯度幅值超过高阈值称为强边缘,被看作是边缘;
    像素的梯度值结余高阈值和低阈值之间,被看做是弱边缘,如果弱边缘与强边缘连接,则该像素视为边缘,否则将其抑制;
    像素的梯度幅值小于低阈值,则该像素为非边缘。

在OpenCV中通过cv2.Canny(image, threshold1, threshold2, edges=None, apertureSize=None, L2gradient=None)实现,
其中第一个参数表示输入的图像;
threshold1, threshold2表示双阈值中的低阈值和高阈值;
edge表示输出图片的大小;
apertureSize表示sobel算子中卷积核的大小;
L2gradient表示梯度如何计算,默认使用:在这里插入图片描述
该参数设置为True,则计算梯度幅值使用:
在这里插入图片描述

非极大值抑制

边缘检测中的非极大值抑制方法,作用是对边缘做初步筛选,去除图像中冗余的边缘。
判断当前像素点的梯度是都为梯度方向上的极值点,如果当前像素点为梯度方向上的极值点则该点保留为边缘,如果当前像素点不是极值点,则将该点抑制。

周围像素点的梯度可能无法计算,则根据已知的像素只梯度通过插值计算。
非极大值抑制只在水平、垂直和两个对角线方向,每一个像素点的梯度方向按照近似程度用0°、90°、45°、135°来近似表示。
通过a2/a5计算出n像素值的梯度;通过a3/a6计算m像素点的梯度。
在这里插入图片描述
非极大值抑制参考

https://blog.csdn.net/weixin_42491648/article/details/131348643?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-131348643-blog-11620357.235v43pc_blog_bottom_relevance_base9&spm=1001.2101.3001.4242.1&utm_relevant_index=3

霍夫变换

极坐标上的一个点对应直角坐标中的一条直线;
直角坐标中的一个点对应极坐标中的一条正弦曲线。
直角坐标映射为极坐标:
在这里插入图片描述
极坐标映射为直角坐标:
在这里插入图片描述

直角坐标对极坐标的变换可以看作是一个参数方程,不同的θ对应不同的ρ值。
在直角坐标系中多个点共线,对应在极坐标系中,多条正弦曲线相交于一点。
霍夫变换检测直线的原理:

  1. Canny边缘检测后得到图像中所有边缘,遍历每一个边缘的像素点映射到极坐标系下。
  2. 该曲线经过的像素点的像素值+1
  3. 极坐标系下每一个元素的数值代表图像中共线的点的个数,
  4. 数值较大的点可以拟合为一条直线,将极坐标下的点的坐标反映射回直角坐标系下,对应一条直线。

霍夫变换检测到之间可视化结果:
在这里插入图片描述


感谢:
https://blog.csdn.net/weixin_48938349/article/details/128750770

https://blog.csdn.net/weixin_42491648/article/details/131348643?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-131348643-blog-11620357.235v43pc_blog_bottom_relevance_base9&spm=1001.2101.3001.4242.1&utm_relevant_index=3

https://blog.csdn.net/weixin_42491648/article/details/131348643?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-131348643-blog-11620357.235%5Ev43%5Epc_blog_bottom_relevance_base9&spm=1001.2101.3001.4242.1&utm_relevant_index=3

https://blog.csdn.net/hai411741962/article/details/132144264

https://blog.csdn.net/gangeqian2/article/details/80034070

https://www.bilibili.com/video/BV1Gv4y167t9/?spm_id_from=333.337.search-card.all.click&vd_source=91cfed371d5491e2973d221d250b54ae

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值