我有一堆图像,中间有一个栏。随着堆栈的进展,条形图围绕一端旋转,整个堆栈包含图像,条形图以许多不同的角度旋转,最高或低于水平 45 度。
如此处所示:
我正在寻找一种方法来旋转条形图和/或整个图像并在进行其他处理之前水平对齐所有内容。理想情况下,这将在 Matlab / imageJ / ImageMagick 中完成。我目前正在尝试使用第一个 Canny 边缘检测,然后是 Hough 变换,然后是图像旋转来制定一种方法,但我希望这是一个已经解决的更普遍问题的特定情况。
我有一堆图像,中间有一个栏。随着堆栈的进展,条形图围绕一端旋转,整个堆栈包含图像,条形图以许多不同的角度旋转,最高或低于水平 45 度。
如此处所示:
我正在寻找一种方法来旋转条形图和/或整个图像并在进行其他处理之前水平对齐所有内容。理想情况下,这将在 Matlab / imageJ / ImageMagick 中完成。我目前正在尝试使用第一个 Canny 边缘检测,然后是 Hough 变换,然后是图像旋转来制定一种方法,但我希望这是一个已经解决的更普遍问题的特定情况。
The problem you are solving is known as image registration or image alignment.
-The first thing you need to due is to treshold the image, so you end up with a black and white image. This will simplify the process.
-Then you need to calculate the mass center of the imgaes and then translate them to match each others centers.
-After the principal axis transformation you can try rotating the pictues a little bit more in each direction to try and optimise the rotation.
All the way through your translation and rotation you need a measure for showing you how good a fit your tranformation is. This measure can be many thing. If the picture is black and white a simple subtraction of the pictures is enough. Otherwise you can use measures like mutual information.
...you can also look at procrustes analysis see this link for a matlab function http://www.google.dk/search?q=gpa+image+analysis&oq=gpa+image+analysis&sugexp=chrome,mod=9&sourceid=chrome&ie=UTF-8#hl=da&tbo=d&sclient=psy-ab&q=matlab+procrustes+analysis&oq=matlab+proanalysis&gs_l=serp.3.1.0i7i30l4.5399.5883.2.9481.3.3.0.0.0.0.105.253.2j1.3.0...0.0...1c.1.5UpjL3-8aC0&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.&bvm=bv.1355534169,d.Yms&fp=afcd637d8ae07bde&bpcl=40096503&biw=1600&bih=767
如果您有图像处理工具箱,则可以使用带有“方向”属性的 regionprops 来查找角度。
http://www.mathworks.com/help/images/ref/regionprops.html#bqkf8ji
使用 ImageJ 的StackReg插件。我不是 100% 确定,但我认为它已经随FIJI (FIJI Is Just ImageJ)一起安装。
编辑:我想我误读了你的问题。那不是您要修复的一堆图像,对吗?在这种情况下,一种简单的方法(可能不是最有效但绝对有效)是以下算法:
正如其他答案所建议的,有几种方法可以解决这个问题。一种可能类似于您已经尝试过的方法是使用霍夫变换。霍夫变换擅长检测线的方向。将其与检测角度后的形态处理和图像旋转相结合,您可以创建一个校正角度变化的系统。基本步骤是
此方法附带的计算机视觉系统工具箱的完整示例。请参阅 http://www.mathworks.com/help/vision/examples/rotation-correction-1.html
您可以尝试给定或户主变换,我更喜欢给定。它需要一个角度,使用 cos(angle) 和 sin(angle) 来制作给定矩阵。