图像处理:对象的旋转对齐

时间:2012-11-30 08:32:34

标签: matlab image-processing octave imagej

我有一堆图像,靠近中心的酒吧。随着堆叠的进行,杆围绕一端枢转,整个堆叠包含图像,杆以不同的角度旋转,最高可达水平上方或下方45度。

如下所示:

enter image description here

我正在寻找一种方法来旋转条形和/或整个图像,并在进行其他处理之前水平对齐所有内容。理想情况下,这将在Matlab / imageJ / ImageMagick中完成。我目前正在尝试使用第一个Canny边缘检测,然后是Hough变换,然后是图像旋转来计算方法,但我希望这是一个已经解决的更普遍问题的特定情况。 / p>

6 个答案:

答案 0 :(得分:1)

如果您有图像处理工具箱,则可以使用具有'Orientation'属性的regionprops来查找角度。

http://www.mathworks.com/help/images/ref/regionprops.html#bqkf8ji

答案 1 :(得分:1)

您正在解决的问题称为图像配准或图像对齐。

- 你需要做的第一件事就是对图像进行阈值处理,这样你最终得到的是黑白图像。这将简化流程。

- 然后你需要计算imga的质心,然后翻译它们以匹配彼此的中心。

  • 然后你需要旋转图像以匹配其他图像。这可以使用主轴测量来完成。主轴将为您提供解释总体中大部分方差的两个轴。这将基本上为您提供一个向量,显示您的栏指向哪个方向。然后你需要的就是沿同一方向旋转条纹。

- 在主轴转换后,您可以尝试在每个方向上稍微旋转图像,以尝试优化旋转。

在翻译和旋转过程中,您需要一个衡量标准来向您展示您的变形是否合适。这个措施可以是很多东西。如果图片是黑白的,那么简单的图片减法就足够了。否则,您可以使用互信息等措施。

...你也可以查看procrustes分析,看看matlab函数的这个链接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

答案 2 :(得分:1)

您可能希望查看SIFT转换。

您应该将代表最坏情况猜测的矩形作为图像,并确定旋转矩阵。

请参阅http://www.vlfeat.org/overview/sift.html

答案 3 :(得分:0)

使用ImageJ的StackReg插件。我不是100%肯定,但我认为它已经安装了FIJI (FIJI Is Just ImageJ)

编辑:我想我误解了你的问题。那不是你试图解决的一堆图像,对吗?在这种情况下,一种简单的方法(可能不是最有效但最终有效),是以下算法:

  1. 阈值图像(看起来很简单,背景总是白色)
  2. 获得一条长水平线作为结构元素并用它扩展图像
  3. 旋转结构元素并保持扩张图像,测量扩张的大小。
  4. 最大化它的角度,是修复图像所需的旋转角度。

答案 4 :(得分:0)

如其他答案所示,有几种解决此问题的方法。一种可能类似于您已经尝试过的方法是使用Hough变换。霍夫变换擅长检测线方向。在检测到角度后,将其与形态处理和图像旋转相结合,您可以创建一个校正角度变化的系统。基本步骤是

  1. 使用“形态”操作使条形成单行blob。
  2. 在此图片上使用Hough变换。
  3. 在变换输出中找到最大值并使用它来查找方向角。
  4. 使用角度修复原始图像。
  5. 此方法附带计算机视觉系统工具箱的完整示例。看到 http://www.mathworks.com/help/vision/examples/rotation-correction-1.html

答案 5 :(得分:0)

你可以尝试给予家庭或家庭变换,我更喜欢给予。 它需要一个角度,使用cos(角度)和sin(角度)来制作给定矩阵。