2012-01-17 129 views
1

我得到一系列正方形的二进制图像作为在下面的图片, enter image description here如何将45°-135°坐标系统的坐标值转换为地球坐标系统?

我想找到红点,这是四个块(2黑色和白色2)的交叉点。为此,我使用沿着方形图像的对角线方向的所有像素值的总和,分别是45度和135度。最大像素总和45度线和最小像素总和135度线是我红点所在的位置。

现在我已经获得了45度-135度坐标系中红点的坐标,如何将它们转换为地球坐标?

也就是说,我在45deg-135deg坐标系统中有一个观点,我如何在x-y坐标系中找到相应的坐标值?什么是转换矩阵?

一些更多的信息,可以帮助:

1)如果图像是一个60x60的形象,我得到了45deg,135deg系统120个值,因为我扫描每一行后面列添加像素。

回答

1

我对matlab并不了解很多,但总体而言,您只需将网格旋转45度即可。 这是一个有用的链接;说明你的旋转矩阵,你需要

wikipedia rotation matrix article

新坐标点之后二维旋转这个样子:
X” = X \ COS \ theta - 用Y \罪\ THETA。
y'= x \ sin \ theta + y \ cos \ theta。

用45代替theta(或者-45),你应该全部设置。

如果你的红点在(X,Y)开始时,则-45度旋转后,将有新的坐标(X”,Y‘),其定义如下:

X’ = x cos(-45) - y sin(-45)
y'= x sin(-45)+ y cos(-45)

+0

确实如此,但并不那么简单,因为您的新图像坐标可能指向图像采样点之间,所以您必须进行某种插值(例如双线性)。我宁愿使用imrotate函数为我处理(如果您有图像处理工具箱)。 – WebMonster 2012-01-17 07:47:21

+0

@WebMonster,就是这么简单。假设你会在另一个方向进行旋转。然后你有位置*像素来自哪里*,并且你可以插入它的原始图像。插值2d不是很难实现。 – halirutan 2012-01-17 22:32:39

1

对不起,当我误解你的问题,但你为什么旋转图像?红点的x值就是x方向的导数具有最大绝对值的点。而对于y方向,它与y方向上的导数相同。

假设你有下面的图片

enter image description here

如果你把它在一开始所有1图像的第一行和大部分宽度零的。第一列的情节看起来像这样。

enter image description here

现在你卷积此行与内核{-1,1}这是在你的线上只有一个嵌套循环,你会得到

enter image description here

现在经历的这个结果和提取具有最高值的点的位置可得到72.因此,红点的x位置为73(因为卷积的核心太快找到了导数的一点)。

因此,如果数据是上述二值图像,然后提取你的红点位置的图像矩阵附近是一条线在数学

Last[Transpose[Position[ListConvolve[{-1, 1}, #] & /@ 
{data[[1]],Transpose[data][[1]]}, 1 | -1]]] + 1 

在这里,你得到{73, 86}这是如果y的正确位置= 0是最上面一行。这种方法应该在几分钟内以任何语言实施。

备注:

  1. 的近似衍生物这是卷积的结果可以是负的或正的。这取决于它是否从0变为1,反之亦然。如果你想搜索最高值,你必须取卷积结果的绝对值。

  2. 请记住,图像矩阵的第一行并不总是在显示图像的顶部位置。这取决于您使用的软件。如果你得到错误的值,请注意这一点。

+0

线不总是地球轴90度和0度,它们不断变化。把它想象成一个纺纱机构。这种方法仍然有效吗? – Sulla 2012-01-17 05:05:31

+0

如果你的方形图像可以旋转,那么我不明白你为什么扫描45度和135度。假设上面的正方形图像正好旋转了45度,那么就和你刚才扫描上面图像中的行和列一样。你可以更新你的文章与3个不同的方形图像没有任何框架或添加线? – halirutan 2012-01-17 14:25:22