java - 图像大小调整双线性插值和最近邻

标签 java algorithm image-processing graphics

我目前在重新缩放和图像算法方面遇到问题。 我目前想实现双线性插值和最近邻。我理解它们在概念上是如何工作的,但是,我似乎无法将其记录到代码中。我仍然停留在最近邻居上 我在下面为其编写了一些伪代码(根据我所知道的):

    Resizing Images: Nearest Neighbour
    Use a loop:for j=0 to Yb-1
    for i=0 to Xb-1
    for c=0 to 2
   (floor) y=j*Ya/Yb 
   (floor) x=i*Xa/Xb
    Ib[j][i][c] = Ia[y][x][c]

我的原始数据集(我在其中获取数据量)存储在 [x][y][z] 和 (x, y, z) 的 3D 数组中。我分别读取每个像素并可以计算使用 java 中的 Color.color 为每个像素设置颜色。然而,我需要知道如何获取每个像素位置 x 和 y (x,y) 的颜色 (c = [0,1,2] ),不包括 z(对于一个 View ),以便为每个新像素转换 1 个旧像素像素到包含新宽度和高度的新数据集中。上面翻译的大部分代码都是我用 Java 编写的。但我仍然不明白如何完成一个有效的实现。

提前致谢😊

最佳答案

我对java不是很熟悉。但这里是 python 的工作代码。

import cv2
import numpy as np

img = cv2.imread("image.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

scaleX = 0.5
scaleY = 0.5

newImg = np.zeros((int(img.shape[0]*scaleX),int(img.shape[1]*scaleY))).astype(np.uint8)

for y in range(newImg.shape[0]):
    for x in range(newImg.shape[1]):
        samplex = x/scaleX
        sampley = y/scaleY
        dx = samplex - np.floor(samplex)
        dy = sampley - np.floor(sampley)

        val = img[int(sampley-dy),int(samplex-dx)]*(1-dx)*(1-dy)
        val += img[int(sampley + 1 - dy),int(samplex-dx)]*(1-dx)*(dy) 
        val += img[int(sampley-dy),int(samplex + 1 - dx)]*(dx)*(1-dy)
        val += img[int(sampley + 1 -dy),int(samplex + 1 - dx)]*(dx)*(dy)

        newImg[y,x] = val.astype(np.uint8)


cv2.imshow("img",newImg)
cv2.waitKey(0)

您只需在 for 和 x for 循环中再添加一个 for 循环即可考虑 channel 。

关于java - 图像大小调整双线性插值和最近邻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60064998/

相关文章:

java - 我应该使用 OpenGL 来制作带动画的国际象棋吗?

java - 作为包装类的参数传递时,在 Java 和 C++ 类实例之间进行转换

java - 如何高效获取每个http状态码的计数?

java - Couchbase Java SDK 存储桶连接管理

java - 字符和外来字符列表

c# - try catch 不安全代码中的异常

c - 处理图像时,它在 GTK 中得到奇怪的颜色

c++ - c和matlab以外语言的图像处理

c++ - 如何从文件中读取哈夫曼树频率

python - 迭代计算所有节点的子树大小?