【问题标题】:Bilinear interpolation in PythonPython中的双线性插值
【发布时间】:2017-08-07 02:58:40
【问题描述】:

我正在尝试评估通过实施最近邻和双线性插值来调整图像大小所提供的图像质量。目前,这两个图像看起来相同。我似乎无法找出双线性方法没有提供应有的平滑输出图像的原因。下面是最近的邻居

def scale_image_NN(image, scaling_factor):
    cv2.imshow('Original image', lena)
    cv2.waitKey(0)
    print 'Running'
    size = np.shape(image)
    scaled_image = np.zeros((size[0]*scaling_factor, size[1]*scaling_factor,3), dtype=np.uint32)
    for i in range (0, scaling_factor*size[0]-3):
         for j in range (0, scaling_factor*size[1]-3):
              x = int(m.floor(i/scaling_factor))
              y = int(m.floor(j/scaling_factor))
                   for k in range (0, 3):
                      scaled_image[i+1, j+1, k] = image[x+1, y+1, k]

    cv2.imshow('Scaled image - NN', scaled_image)
    cv2.waitKey(0)
cv2.imwrite('NN.jpg',scaled_image)

然后是双线性插值

def scale_image_BL(image, scaling_factor):
    cv2.imshow('Original image', lena)
    cv2.waitKey(0)
    print 'Running'
    orig_size = np.shape(image)
    h = orig_size[0]
    w = orig_size[1]
    c = orig_size[2]
    r = scaling_factor 
    padded_image = np.zeros((h*scaling_factor, w*scaling_factor, c), dtype=np.uint8)

    for i in range (0, h*scaling_factor):
        x1 = int(m.floor(i/r))
        x2 = int(m.ceil(i/r))
        if x1 == 0:
            x1 = 1
       x = np.remainder(i/r,1)
       for j in range (0, w*scaling_factor):
            y1 = int(m.floor(j/r))
            y2 = int(m.ceil(j/r))
            if y1 == 0:
                y1 = 1
            ctl = image[x1, y1, :]
            cbl = image[x2, y1, :]
            ctr = image[x1, y2, :]
            cbr = image[x2, y2, :]      

            y = np.remainder(j/r, 1)
            tr = (ctr*y) + (ctl*(1-y))  
            br = (ctr*y) + (cbl*(1-y))
            padded_image[i, j, :] = (br*x)+(tr*(1-x))

    scaledImage = padded_image.astype(np.uint8)
    cv2.imshow('Scaled image - BL',scaledImage)
    cv2.waitKey(0)
    cv2.imwrite('BL.jpg',scaledImage)

【问题讨论】:

    标签: python opencv interpolation


    【解决方案1】:

    问题是由于Why does Python return 0 for simple division calculation?

    在计算两个插值位置的过程中,比如双线性插值中的 x1 或 x2,python 为简单的除法(例如 1/2)返回 0,而不是 0.5,因此并不总是有两个点在产生NN型输出之间进行插值。

    要使 scale_image_BL(image, scaling_factor) 起作用,只需包括:

    来自未来进口部门

    在脚本的开头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      相关资源
      最近更新 更多