2011-02-11 99 views
9

我有一个问题,如下所示顶部是一个原始图像底部的标题是左侧90度。有没有办法来计算角度的变化。我试过霍夫变换,我可以检测到位置,但是我无法检测到变化的天使。是否有替代检测度数已更改。比较多少度倾斜的图像

enter image description here

enter image description here

+0

我该如何解决?我从未注意到这一点。 – user288231 2011-02-12 02:59:18

+0

您需要通过勾选来选择最佳答案。 – 2011-02-12 08:18:49

回答

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 描述符,这确保了在存在噪声的情况下的高判别能力和出色的 健壮性。 本文介绍了 的原理及其分立 的实现方式,用于图像 检测问题或图像 注册问题。实际 结果呈现用于医学成像的各种 应用, 遥感,指纹 识别和多目标 识别

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") 

希望有所帮助。
p.s. 根据wiki可以用两种不同的方式计算两个向量之间的RMSE。我不知道在ImageMagick中执行哪一个命令为

compare.exe -metric rmse
命令,但可以肯定的是,可以通过询问IM开发人员或通过试错法来确定。