1

我是图像处理的新手。现在我有一个问题。我正在 C# 上编写一个简单的程序,它必须通过一些示例在图像上定义一些对象。

例如这里的示例:

样本

稍后我必须将我在可加载图像上找到的对象与它进行比较。对象和样本的大小总是相等的。图像被二值化。我们总是知道旋转点(它是图像的中心)。样本总是被归一化的,但我们永远不知道物体相对于法线的旋转角度。

以下是我在可加载图像上找到的一些对象:

样品1 样品2

问题是如何找到角度#1。对不起我的英语,谢谢。

4

3 回答 3

1

如果您使用的是 aforge 库,您也可以使用他的扩展,名为 Accord.Net。

Accord.Net 与 Aforge 类似,你安装它,在你的项目中添加引用,你就完成了。

之后,您可以通过传递目标图像来简单地使用RawMoments,然后您可以使用它们来计算CentralMoments

此时您可以使用 CentralMoments GetOrientation()的方法获取图像的角度,并获得角度。

我在一个手势识别项目中使用了它,并且像一个魅力一样工作。

更新: 我刚刚检查了 GetOrientation 只得到角度而不是方向。因此,倒置的图像与原始图像具有相同的角度。一个修复,可以是像素计数,但这次你只会得到 2 个(最坏情况)样本来检查,而不是 360 个(最坏情况)样本。

更新2

如果你有很多样本,我建议你用旋转图像的大小过滤它们。示例:我得到图像,我看到它处于水平位置(90°)我将它旋转 90°,现在我有了原始宽度和高度,我可以利用它来跳过不相似的样本,例如:

If (Founded.Width != Sample.Width)    //You can add a range too if in case during
 Continue;                            //the rotation are added some pixels
于 2013-05-28T11:35:03.760 回答
0

回顾一下,您有一个示例图像和同一源图像的旋转图像。您还有两个0,1像素值。

可以使用二进制搜索来实现一个可以产生中等成功的简单伪代码:

  1. 从旋转值开始为 180 度 - 顺时针和逆时针
  2. 将图像旋转到这两个值。
  3. 从旋转的图像中异或原始图像。
  4. 计算0像素数并检查它是否小于您定义的误差范围。
  5. 以一半的旋转角度继续搜索。
于 2013-05-25T14:00:46.867 回答
0

看这个

扫描文档的旋转角度

于 2013-05-25T14:15:43.260 回答