7

我有一堆图像,中间有一个栏。随着堆栈的进展,条形图围绕一端旋转,整个堆栈包含图像,条形图以许多不同的角度旋转,最高或低于水平 45 度。

如此处所示:

在此处输入图像描述

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

4

6 回答 6

1

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.

  • Then you need to rotate the images to matcheach other. This could be done using the principal axis measure. The principal axis will give you the two axis that explain most of the variance in the population. Which will basically give you a vector showing which way your bar is pointing. Then all you need to due is rotate the bars in the same direction.

-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

于 2012-12-27T17:55:42.217 回答
1

如果您有图像处理工具箱,则可以使用带有“方向”属性的 regionprops 来查找角度。

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

于 2012-11-30T17:12:33.463 回答
1

您可能想研究 SIFT 变换。

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

http://www.vlfeat.org/overview/sift.html

于 2012-12-28T17:57:49.873 回答
0

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

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

  1. 阈值图像(看起来很容易,你的背景总是白色的)
  2. 得到一条长的水平线作为结构元素并用它扩大图像
  3. 旋转结构元素并保持扩张图像,测量扩张的大小。
  4. 最大化它的角度是修复图像所需的旋转角度。
于 2012-11-30T09:17:49.920 回答
0

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

  1. 使用形态学操作使条形图成为单行斑点。
  2. 对此图像使用霍夫变换。
  3. 在变换输出中找到最大值并使用它来查找方向角。
  4. 使用角度固定原始图像。

此方法附带的计算机视觉系统工具箱的完整示例。请参阅 http://www.mathworks.com/help/vision/examples/rotation-correction-1.html

于 2012-12-27T19:19:09.400 回答
0

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

于 2013-01-06T02:07:02.883 回答