我得到一系列方形二进制图像,如下图所示,
我想找到红点,这是四个块(2个黑色和2个白色)的交点。为此,我用来获得沿方形图像的对角线方向的所有像素值的总和,分别为45度和135度。最大像素和45度线与最小像素和135度线的交点是我的红点所在。
现在我得到了45度-135度坐标系中红点的坐标,如何将它们转换为地球坐标?
换句话说,我在45deg-135deg坐标系中有一点意义;如何在x-y坐标系中找到相应的坐标值?什么是转换矩阵?
可能会有所帮助的更多信息:
1)如果图像是60x60图像,我在45deg-135deg系统中得到120个值,因为我扫描每一行后跟列添加像素。
答案 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方向的导数相同。
假设您有以下图片
如果您拍摄图像的第一行,则它在开头全部为1,而对于大多数宽度为零。第一列的情节看起来像这样。
现在你将这一行与内核{-1,1}进行卷积,这只是你的一行上的一个嵌套循环,你得到了
现在通过这个结果并提取具有最高值的点的位置得到72.因此红点的x位置是73(因为卷积的内核过早地找到导数的一个点)。
因此,如果 data 是上述二进制图像的图像矩阵,则提取红点位置接近Mathematica中的一行
Last[Transpose[Position[ListConvolve[{-1, 1}, #] & /@
{data[[1]],Transpose[data][[1]]}, 1 | -1]]] + 1
如果y = 0是最上一行,那么你得到{73, 86}
这是正确的位置。这种方法应该在几分钟内用任何语言实现。
备注:
作为卷积结果的近似导数可以是负数或正数。这取决于它是从0变为1还是从0变为1。如果要搜索最高值,则必须获取卷积结果的绝对值。
请记住,图像矩阵中的第一行并不总是位于显示图像的顶部位置。这取决于您使用的软件。如果你弄错了,你应该注意这一点。