gpt4 book ai didi

python - 将多项式拟合转换回图像空间

转载 作者:行者123 更新时间:2023-12-02 16:53:02 25 4
gpt4 key购买 nike

我有一张图片:

>>> image.shape
(720, 1280)

我的图像是 0 和 255 的二进制数组。我做了一些粗略的边缘检测,现在我想通过这些点拟合一个多项式。

我想在图像空间中的原始图像上看到这些点。

据我所知,执行此操作的标准方法是使用 reshape 解开 x,y- 图像,适合解开的版本,然后重新整形回原始图像。
pts = np.array(image).reshape((-1, 2))
xdata = pts[:,0]
ydata = pts[:,1]
z1 = np.polyfit(xdata, ydata, 1)
z2 = np.polyfit(xdata, ydata, 2) # or quadratic...
f = np.poly1d(z)

现在我有了这个功能, f ,如何使用它在原始图像空间中绘制我的线条?

尤其:
  • .reshape() 返回图像空间的正确反向索引是什么?
  • 这似乎有点麻烦。这种 reshape reshape dance 在图像处理中是不是很常见?上面描述的是执行此操作的标准方法,还是有不同的方法?
  • 如果映射到 720, 1280, 1 数组上称为图像空间,那么重构后的空间称为什么?数据空间?线性空间?
  • 最佳答案

    你不需要这样做。可以结合 np.nonzero , np.polyfit np.polyval 去做这个。它看起来像这样:

    import numpy as np
    from matplotlib import pyplot as plt

    # in your case, you would read your image
    # > cv2.imread(...) # import cv2 before
    # but we are going to create an image based on a polynomial
    img = np.zeros((400, 400), dtype=np.uint8)
    h, w = img.shape
    xs = np.arange(150, 250)
    ys = np.array(list(map(lambda x: 0.01 * x**2 - 4*x + 600, xs))).astype(np.int)
    img[h - ys, xs] = 255

    # I could use the values I have, but if you have a binary image,
    # you will need to get them, and you could do something like this
    ys, xs = np.nonzero(img) # use (255-img) if your image is inverted
    ys = h - ys

    # compute the coefficients
    coefs = np.polyfit(xs, ys, 2)
    xx = np.arange(0, w).astype(np.int)
    yy = h - np.polyval(coefs, xx)

    # filter those ys out of the image, because we are going to use as index
    xx = xx[(0 <= yy) & (yy < h)]
    yy = yy[(0 <= yy) & (yy < h)].astype(np.int) # convert to int to use as index

    # create and display a color image just to viz the result
    color_img = np.repeat(img[:, :, np.newaxis], 3, axis=2)
    color_img[yy, xx, 0] = 255 # 0 because pyplot is RGB
    f, ax = plt.subplots(1, 2)
    ax[0].imshow(img, cmap='gray')
    ax[0].set_title('Binary')
    ax[1].imshow(color_img)
    ax[1].set_title('Polynomial')
    plt.show()

    结果如下所示:

    Sample Polynomial

    如果您打印 coefs ,您将拥有 [ 1.00486819e-02 -4.01966712e+00 6.01540472e+02]非常接近 [0.01, -4, 600]我们选择了。

    关于python - 将多项式拟合转换回图像空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55599217/

    25 4 0