• 图像倾斜角度求取-Radon变换


    Radon算法

    Radon(拉东)算法是一种通过定方向投影叠加,找到最大投影值时角度,从而确定图像倾斜角度的算法。具体过程如图所示 

    图1 Radon变换算法

    Radon计算示例

    对于纹理方向明显的图像,如图2所示,可以通过Radon变换求取倾斜角度。

    图2 带求倾斜角度图像

    具体步骤如下:

    1、图像傅里叶变换

    采用Cv2.Dft函数,对图2进行傅里叶变换,变换后的图像如图3所示:

    图3 二值化后的傅里叶变换图像

    从上面图像可以看到,傅里叶变化图像3方向,与图像2纹理方向呈现垂直关系。我们只要求出来图3的倾斜方向,即可求出来实际图像的倾斜方向。

    对于尺寸较大的图像,可采取金字塔下采样方式,将图像进行压缩,以减少Radon计算的时间。

    2、金字塔下采样

    应用Cv2.PyrDown进行金字塔下采样,减少图像3的尺寸。

    1. while (pyrMat.Width > 100 || pyrMat.Height > 100)
    2. {
    3. Cv2.PyrDown(pyrMat, pyrMat, new OpenCvSharp.Size(tempMat.Cols * 0.5, tempMat.Rows * 0.5));
    4. }

    压缩后的图像如下图4所示。

    图4 金字塔下采样的图片 

    3、Radon变换

    根据Radon变换原理,编写Radon变换代码,伪代码如下所示:

    1. for (int t = 0; t < 180; t++)
    2. {
    3. double tempAngle = t * Math.PI / angle;
    4. float[,] R = new float[3, 3] {{(float)Math.Cos(tempAngle), (float)Math.Sin(tempAngle), 0 },
    5. { -(float)Math.Sin(tempAngle), (float)Math.Cos(tempAngle), 0},
    6. { 0, 0, 1 } };
    7. Mat mR = new Mat(3, 3, MatType.CV_32FC1, R);
    8. Mat rotation = m1 * mR * m0;
    9. Mat rotated = new Mat();
    10. Cv2.WarpPerspective(dst, rotated, rotation, new OpenCvSharp.Size(dst.Rows, dst.Cols), InterpolationFlags.WarpInverseMap);
    11. rotated.ConvertTo(rotated, MatType.CV_8UC1);
    12. //Cv2.ImShow("test3", rotated);
    13. rotated.ConvertTo(rotated, MatType.CV_32FC1);
    14. double Sum = 0;
    15. List<float> arrMaxCol = new List<float>();
    16. for (int j = 0; j < rotated.Cols; j++)
    17. {
    18. /*正文下载链接中有详细代码*/
    19. }
    20. arrMaxAngle.Add(arrMaxCol.Max());
    21. }
    22. var maxSum = arrMaxAngle.Max();
    23. var maxInd = arrMaxAngle.IndexOf(maxSum);
    24. return maxInd-90;

     最终计算的倾斜角度如下图5程序界面所示。

    图5 最终计算结果 

    Radon变换的下载链接如下:

    https://download.csdn.net/download/qq_20660115/88550141 

  • 相关阅读:
    1.python简介
    汇编语言与微机原理 期末复习题整理(大题)
    从Oracle迁移数据到Hadoop
    Python语言第五章之字符串
    记一次坎坷的调试|Mosquitto通过TLS连接EMQ时阻塞的问题
    task_struct
    实验4、黑盒测试:因果图法及测试用例设计
    8 种 Python 定时任务的解决方案
    day3|第05章_排序与分页|2022-11-14
    RabbitMQ消息中间件
  • 原文地址:https://blog.csdn.net/qq_20660115/article/details/134494527