如何将45度-135度坐标系中的坐标值转换为地球坐标系?

时间:2012-01-17 01:31:34

标签: math matlab image-processing geometry trigonometry

我得到一系列方形二进制图像,如下图所示, enter image description here

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

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

换句话说,我在45deg-135deg坐标系中有一点意义;如何在x-y坐标系中找到相应的坐标值?什么是转换矩阵?

可能会有所帮助的更多信息:

1)如果图像是60x60图像,我在45deg-135deg系统中得到120个值,因为我扫描每一行后跟列添加像素。

2 个答案:

答案 0 :(得分:1)

我对matlab了解不多,但总的来说,你需要做的就是将网格旋转45度。 这是一个有用的链接;显示您需要的旋转矩阵

wikipedia rotation matrix article

2D旋转后点的新坐标如下所示:
    x'= x \ cos \ theta - y \ sin \ theta。
    y'= x \ sin \ theta + y \ cos \ theta。

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

如果您的红点从(x,y)开始,那么在-45度旋转之后它将具有新坐标(x',y'),其定义如下:

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

答案 1 :(得分:1)

很抱歉,当我误解了你的问题,但为什么要旋转图片?红点的x值只是x方向的导数具有最大绝对值的点。而对于y方向,它与y方向的导数相同。

假设您有以下图片

enter image description here

如果您拍摄图像的第一行,则它在开头全部为1,而对于大多数宽度为零。第一列的情节看起来像这样。

enter image description here

现在你将这一行与内核{-1,1}进行卷积,这只是你的一行上的一个嵌套循环,你得到了

enter image description here

现在通过这个结果并提取具有最高值的点的位置得到72.因此红点的x位置是73(因为卷积的内核过早地找到导数的一个点)。

因此,如果 data 是上述二进制图像的图像矩阵,则提取红点位置接近Mathematica中的一行

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

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

备注:

  1. 作为卷积结果的近似导数可以是负数或正数。这取决于它是从0变为1还是从0变为1。如果要搜索最高值,则必须获取卷积结果的绝对值。

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