Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python matplotlib中不规则四边形到矩形的变换_Python_Matplotlib - Fatal编程技术网

python matplotlib中不规则四边形到矩形的变换

python matplotlib中不规则四边形到矩形的变换,python,matplotlib,Python,Matplotlib,我有一段视频中的数据 矩形的顶点 动物在矩形内跟踪的点 由于图像变形,我的“矩形”不规则。 我想转换数据,以便在matplotlib中将其绘制为矩形 有简单的方法吗 这是最新的。我把它分解成五个四边形。请注意,在本例中,它们还处理扭曲和仿射变换。下面是一个基本的角点检测示例。我假设图像中没有矩形的坐标 import matplotlib.pyplot as plt from skimage.feature import corner_harris, corner_subpix, corner

我有一段视频中的数据

  • 矩形的顶点
  • 动物在矩形内跟踪的点
由于图像变形,我的“矩形”不规则。 我想转换数据,以便在matplotlib中将其绘制为矩形

有简单的方法吗

这是最新的。我把它分解成五个四边形。请注意,在本例中,它们还处理扭曲和仿射变换。下面是一个基本的角点检测示例。我假设图像中没有矩形的坐标

import matplotlib.pyplot as plt
from skimage.feature import corner_harris, corner_subpix, corner_peaks

image = plt.imread('test.jpg')

coords = corner_peaks(corner_harris(image), min_distance=2)
coords_subpix = corner_subpix(image, coords, window_size=13)

fig, ax = plt.subplots()
ax.imshow(image,cmap=plt.cm.gray)
ax.plot(coords[:,1],coords[:,0],'.b',markersize=5)
plt.title("Example of corner detection")
ax.axis((0,800,800,0))
plt.xlabel('x (pixels)')
plt.ylabel('y (pixels)')
这输出了这张图片,你可以看到四边形是我的图片,skimage已经找到了角点(蓝点):

我将把转换成一个矩形留给您。
AffineTransformation
工具将完成此任务。它将移动这些点以形成一个矩形。如果我在这方面有任何进展,我将添加到帖子中。

您可以使用from
scikit image
将四边形内的坐标转换为局部正方形空间[0,1]×[0,1]

有关如何应用线性代数来解决此问题的更多信息,请参阅Paul Heckbert的“或”,1999年

假设四边形的角按顺时针顺序排列:

bottom_left=[58.6539,31.512]
左上方=[27.8129127.462]
右上方=[158.03248.769]
右下角=[216.971,84.2843]
我们实例化一个
投影变换
,并要求它找到四边形内部到单位平方的投影变换映射点:

from skimage.transform import ProjectiveTransform
t = ProjectiveTransform()
src = np.asarray(
    [bottom_left, top_left, top_right, bottom_right])
dst = np.asarray([[0, 0], [0, 1], [1, 1], [1, 0]])
if not t.estimate(src, dst): raise Exception("estimate failed")
现在,变换
t
可以将点变换为单位平方。当然,通过更改上面的
dst
,可以缩放到与单位正方形不同的矩形(甚至可以缩放到完全不同的四边形)

我们绘制输入数据和转换数据,以查看转换是否正常工作:

import matplotlib.pyplot as plt
plt.figure()
plt.plot(src[[0,1,2,3,0], 0], src[[0,1,2,3,0], 1], '-')
plt.plot(data.T[0], data.T[1], 'o')
plt.figure()
plt.plot(dst.T[0], dst.T[1], '-')
plt.plot(data_local.T[0], data_local.T[1], 'o')
plt.show()

这需要的不仅仅是matplotlib。你有每帧顶点的数据吗?顶点是固定的。整个实验过程中,摄像机和迷宫都在同一个位置。你能分享一张图像吗?要么直接在这里,要么链接到一个。你说的“正四边形”是什么意思?正四边形是正方形,但我想你不是这个意思。你是说边平行于轴线的矩形吗?您是否只想沿着小中心正方形中的虚线将图形切割成五个矩形,然后旋转生成的矩形?您的数据格式是什么?如果我对这个问题的猜测是正确的,那么这个问题听起来很简单,但是我需要一些更详细的细节,请。你的右边,我需要4个矩形和中心正方形。我的数据是numpy数组。也许我说错了,我有要点。这些都是在使用Opencv的GUI中手动提取的。不,我做了一个假设,但错了。或者您可以通过
numpy.linalg
查看旋转矩阵。我想这就是旋转矩阵的位置。共享一个图像仍然会有帮助!这是工作!!!。如果不是t.estimate(src,dst),我只会遇到行的问题:raiseexception(“estimate failed”),它给出了异常。我只把t.estimate(scr,dst)放进去运行。谢谢
import matplotlib.pyplot as plt
plt.figure()
plt.plot(src[[0,1,2,3,0], 0], src[[0,1,2,3,0], 1], '-')
plt.plot(data.T[0], data.T[1], 'o')
plt.figure()
plt.plot(dst.T[0], dst.T[1], '-')
plt.plot(data_local.T[0], data_local.T[1], 'o')
plt.show()