比较图像倾斜度数

时间:2011-02-11 14:09:59

标签: c# image-processing

我遇到了一个问题,如下图所示是原始图像,底部的图像向左倾斜90度。有没有办法计算角度的变化。我已经尝试了霍夫的变换,我可以检测到位置,但是我无法检测到变化的天使。是否有替代方法可以检测到的度数。

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:5)

在使用对称仅相位匹配滤波器之前,我已经完成了这项工作。它实际上用于指纹识别,允许旋转和缩放。不幸的是,它非常复杂。您需要熟悉如何计算FFT和类似级别的数学。我没有在C#中做到这一点,但是在MATLAB中(以及在可综合的Verilog中,但这完全是另一个故事)。我建议首先使用MATLAB或类似的数学包,以确保你的算法正确。

希望有人已经在某个.NET图像处理库中实现了这个算法。

我使用的论文如下。它比算法更基于数学,所以将它转换为代码需要一些工作:

  陈勤生; Defrise,M。; Deconinck,F。   "Symmetric phase-only matched filtering of Fourier-Mellin transforms for image registration and recognition,"   模式分析与   机器智能,IEEE   交易,第16卷,第12期,   pp.1156-1168,1994年12月

     

摘要:提出了一种新的方法   匹配2D图像到翻译,   旋转和缩放参考图像。   该方法包括两个步骤:   傅立叶 - 梅林的计算   每个的不变量(FMI)描述符   要匹配的图像和匹配   FMI描述符。 FMI   描述符是翻译不变量,   并表示旋转和缩放   参数空间中的翻译。该   FMI描述符的匹配是   使用对称相位实现   匹配过滤(SPOMF)。该   FMI-SPOMF算法的性能   与...的相同或相似   仅相位匹配滤波时   处理图像翻译。该   新的显着优势   技术是它的匹配能力   精确旋转和缩放图像   并且有效率。创新是   SPOMF在FMI中的应用   描述符,保证高   辨别力量和优秀   在存在噪音的情况下的稳健性。   本文介绍了原理   新方法及其离散   任一图像的实现   检测问题或图像   注册问题。实际的   结果显示各种   在医学成像中的应用,   遥感,指纹   认可和多目标   识别

答案 1 :(得分:0)

您还可以循环旋转第二个图像恒定角度,并在每次迭代中计算两个图像之间的RMSE。匹配角度将是RMSE最小的位置。

以下是使用powershell实现此想法的ImageMagick脚本:

# convert images to equal sizes for pixel by pixel comparision
convert.exe p1.png -resize 73x73! p1.png
convert.exe p2.png -resize 73x73! p2.png

# initialize variables
$min_rmse = 1.0
$degrees_rotated = -1.0

# rotate second image by 10 degrees in each iteration
# and after that measure RMSE between first image and second rotated image
for ($i=0; $i -le 350; $i+=10) {
    convert.exe p2.png -rotate $i tmp.png
    convert.exe tmp.png -resize 73x73! tmp.png
    $rmse = compare.exe -metric rmse p1.png tmp.png diff.png 2>&1
    $rmse = ([string] $rmse).split(" ")[1]
    $rmse = $rmse.replace("(","")
    $rmse = [double] $rmse.replace(")","")

    # find rotation angle where RMSE is minimal
    if ($rmse -lt $min_rmse) {
        $min_rmse = $rmse
        $degrees_rotated = $i
    }
}

Write-Host "two images are most similar when second image is rotated by $degrees_rotated deg (rmse is $min_rmse)"
Write-Host "Press any key to exit ..." 
$host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

希望有所帮助。
附: 根据wiki,两个向量之间的RMSE可以用两种不同的方式计算。我不知道哪一个在ImageMagick中实现为

compare.exe -metric rmse
命令,但可以肯定这可以通过询问IM开发人员或通过反复试验方法来确定。