gpt4 book ai didi

python - 用于图像缩放的双三次插值

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:44 25 4
gpt4 key购买 nike

我正在尝试实现一个非常基本的双三次算法以将其用于图像缩放。我用了other questions堆栈溢出并试图将代码翻译成 Python。

它正确执行,没有任何错误,我已经检查了几次数学,但我找不到这种问题的原因似乎一切都应该运行顺利,但结果我得到了这个:

Result

感谢任何帮助。

这是来源:

def getBicPixelChannel(img,x,y,channel):
if x < img.shape[1] & y < img.shape[0]:
return img[y,x,channel]

return 0


def Bicubic(img, rate):
new_w = int(math.ceil(float(img.shape[1]) * rate))
new_h = int(math.ceil(float(img.shape[0]) * rate))

new_img = np.zeros((new_w, new_h, 3))

x_rate = float(img.shape[1]) / new_img.shape[1]
y_rate = float(img.shape[0]) / new_img.shape[0]

C = np.zeros(5)

for hi in range(new_img.shape[0]):
for wi in range(new_img.shape[1]):

x_int = int(wi * x_rate)
y_int = int(hi * y_rate)

dx = x_rate * wi - x_int
dy = y_rate * hi - y_int

for channel in range(new_img.shape[2]):
for jj in range(0,4):
o_y = y_int - 1 + jj
a0 = getBicPixelChannel(img,x_int,o_y, channel)
d0 = getBicPixelChannel(img,x_int - 1,o_y, channel) - a0
d2 = getBicPixelChannel(img,x_int + 1,o_y, channel) - a0
d3 = getBicPixelChannel(img,x_int + 2,o_y, channel) - a0

a1 = -1./3 * d0 + d2 - 1./6 * d3
a2 = 1./2 * d0 + 1./2 * d2
a3 = -1./6 * d0 - 1./2 * d2 + 1./6 * d3
C[jj] = a0 + a1 * dx + a2 * dx * dx + a3 * dx * dx * dx

d0 = C[0] - C[1]
d2 = C[2] - C[1]
d3 = C[3] - C[1]
a0 = C[1]
a1 = -1. / 3 * d0 + d2 - 1. / 6 * d3
a2 = 1. / 2 * d0 + 1. / 2 * d2
a3 = -1. / 6 * d0 - 1. / 2 * d2 + 1. / 6 * d3
new_img[hi, wi, channel] = a0 + a1 * dy + a2 * dy * dy + a3 * dy * dy * dy

return new_img

最佳答案

我认为你的问题出在这行代码中:

if x < img.shape[1] & y < img.shape[0]:

据我所知,&是 Python 中的按位 AND 运算符,它有一个 higher precedence< .因此,您正在计算的是:

if x < ( img.shape[1] & y ) < img.shape[0]:

(不管那是什么意思……)

相反,试试这个:

if (x < img.shape[1]) and (y < img.shape[0]):

and是 Python 的 bool AND 运算符。

关于python - 用于图像缩放的双三次插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49819314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com