买域名建网站,百度推广页面投放,顺义区专业网站制作网站建设,政务公开和网站建设工作问题码字不易#xff0c;如果此文对你有所帮助#xff0c;请帮忙点赞#xff0c;感谢#xff01;一. 双线性插值法原理#xff1a;① 何为线性插值#xff1f;插值就是在两个数之间插入一个数#xff0c;线性插值原理图如下#xff1a;在位置 x 进行线性插值#xff0c;插…码字不易如果此文对你有所帮助请帮忙点赞感谢一. 双线性插值法原理① 何为线性插值插值就是在两个数之间插入一个数线性插值原理图如下在位置 x 进行线性插值插入的值为f(x) ↑② 各种插值法插值法的第一步都是相同的计算目标图(dstImage)的坐标点对应原图(srcImage)中哪个坐标点来填充计算公式为srcX dstX * (srcWidth/dstWidth)srcY dstY * (srcHeight/dstHeight)(dstX,dstY)表示目标图像的某个坐标点(srcX,srcY)表示与之对应的原图像的坐标点。srcWidth/dstWidth 和 srcHeight/dstHeight 分别表示宽和高的放缩比。那么问题来了通过这个公式算出来的 srcX, scrY 有可能是小数但是原图像坐标点是不存在小数的都是整数得想办法把它转换成整数才行。不同插值法的区别就体现在 srcX, scrY 是小数时怎么将其变成整数去取原图像中的像素值。最近邻插值(Nearest-neighborInterpolation)看名字就很直白四舍五入选取最接近的整数。这样的做法会导致像素变化不连续在目标图像中产生锯齿边缘。双线性插值(Bilinear Interpolation)双线性就是利用与坐标轴平行的两条直线去把小数坐标分解到相邻的四个整数坐标点。权重与距离成反比。双三次插值(Bicubic Interpolation)与双线性插值类似只不过用了相邻的16个点。但是需要注意的是前面两种方法能保证两个方向的坐标权重和为1但是双三次插值不能保证这点所以可能出现像素值越界的情况需要截断。③ 双线性插值算法原理双线性插值算法原理图将P的小数坐标变成 Q11、Q12、Q21、Q22 4个整数坐标内容的加权和 ↑假如我们想得到未知函数 f 在点 P (x, y) 的值假设我们已知函数 f 在 Q11 (x1, y1)、Q12 (x1, y2), Q21 (x2, y1) 以及 Q22 (x2, y2) 四个点的值。最常见的情况f就是一个像素点的像素值。首先在 x 方向进行线性插值然后再在 y 方向上进行线性插值最终得到双线性插值的结果。x 方向上线性插值算法 ↑y 方向上线性插值算法 ↑双线性插值算法 ↑④ 举例说明如果选择一个坐标系统使得 f 的四个已知点坐标分别为 (0, 0)、(0, 1)、(1, 0) 和 (1, 1)那么双线性插值公式就可以化简为上式 ↑矩阵表示为 ↑可以看到与这种插值方法名称不同的是这种插值方法的结果通常不是线性的它的形式是 ↑二. python实现灰度图像双线性插值算法灰度图像双线性插值放大缩小import numpy as npimport mathimport cv2def double_linear(input_signal, zoom_multiples):双线性插值:param input_signal: 输入图像:param zoom_multiples: 放大倍数:return: 双线性插值后的图像input_signal_cp np.copy(input_signal) # 输入图像的副本input_row, input_col input_signal_cp.shape # 输入图像的尺寸(行、列)# 输出图像的尺寸output_row int(input_row * zoom_multiples)output_col int(input_col * zoom_multiples)output_signal np.zeros((output_row, output_col)) # 输出图片for i in range(output_row):for j in range(output_col):# 输出图片中坐标 (ij)对应至输入图片中的最近的四个点点(x1y1)(x2, y2)(x3 y3)(x4y4)的均值temp_x i / output_row * input_rowtemp_y j / output_col * input_colx1 int(temp_x)y1 int(temp_y)x2 x1y2 y1 1x3 x1 1y3 y1x4 x1 1y4 y1 1u temp_x - x1v temp_y - y1# 防止越界if x4 input_row:x4 input_row - 1x2 x4x1 x4 - 1x3 x4 - 1if y4 input_col:y4 input_col - 1y3 y4y1 y4 - 1y2 y4 - 1# 插值output_signal[i, j] (1-u)*(1-v)*int(input_signal_cp[x1, y1]) (1-u)*v*int(input_signal_cp[x2, y2]) u*(1-v)*int(input_signal_cp[x3, y3]) u*v*int(input_signal_cp[x4, y4])return output_signal# Read imageimg cv2.imread(../paojie_g.jpg,0).astype(np.float)out double_linear(img,2).astype(np.uint8)# Save resultcv2.imshow(result, out)cv2.imwrite(out.jpg, out)cv2.waitKey(0)cv2.destroyAllWindows()三. 灰度图像双线性插值实验结果原图 ↑放大2倍后图像 ↑四. 彩色图像双线性插值python实现def BiLinear_interpolation(img,dstH,dstW):scrH,scrW,_img.shapeimgnp.pad(img,((0,1),(0,1),(0,0)),constant)retimgnp.zeros((dstH,dstW,3),dtypenp.uint8)for i in range(dstH-1):for j in range(dstW-1):scrx(i1)*(scrH/dstH)scry(j1)*(scrW/dstW)xmath.floor(scrx)ymath.floor(scry)uscrx-xvscry-yretimg[i,j](1-u)*(1-v)*img[x,y]u*(1-v)*img[x1,y](1-u)*v*img[x,y1]u*v*img[x1,y1]return retimgim_path../paojie.jpgimagenp.array(Image.open(im_path))image2BiLinear_interpolation(image,image.shape[0]*2,image.shape[1]*2)image2Image.fromarray(image2.astype(uint8)).convert(RGB)image2.save(3.png)五. 彩色图像双线性插值实验结果原图 ↑RGB图像双线性插值放大2倍后图像 ↑六. 最近邻插值算法和双三次插值算法可参考七. 参考内容