1、亚像素是什么
物理像素:传感器实际捕捉到的最小单位的像素
亚像素:通过差值等方法得到的虚拟像素
2、如何得到亚像素
1)差值(双线性、双三次插值)
双线性插值
线性插值就相当于 有一个函数f(x) = ax + b,在A、B两点之间能找到一个你想要的点。然后由于两点间的点有无数个,只用一个函数来确定我们想要的点误差有点大,就有了双线性插值,用多个函数来确定这个点。
感觉日常的图像放大缩小最简单的就是使用双线性插值,先计算缩小或放大多少,然后得到一个新的坐标轴,根据未变化前的坐标轴相邻的四个像素值来确定新位置的值。
双线性插值参考博主双线性插值(Bilinear Interpol)原理及应用_双边插值-优快云博客、双线性插值 - 一杯明月 - 博客园讲的十分清楚。
def bilinear_interpolation(image, x, y):
"""
双线性插值函数
:param image: 输入图像
:param x: 目标点的横坐标
:param y: 目标点的纵坐标
:return: 目标点的插值结果
"""
# 获取目标点所在的四个像素点坐标
x1, y1 = int(x), int(y)
x2, y2 = min(x1 + 1, image.shape[1] - 1), min(y1 + 1, image.shape[0] - 1)
# 获取四个像素点的灰度值
Q11 = image[y1, x1]
Q21 = image[y1, x2]
Q12 = image[y2, x1]
Q22 = image[y2, x2]
# 计算权重
dx = x - x1
dy = y - y1
# 计算目标点的插值结果
result = (Q11 * (1 - dx) * (1 - dy) +
Q21 * dx * (1 - dy) +
Q12 * (1 - dx) * dy +
Q22 * dx * dy)
return result
双三次插值
双三次插值又称立方卷积插值,利用周围16个点来插值。不仅考虑到4 个直接相邻点的灰度影响,而且考虑到各邻点间灰度值变化率的影响。三次插值更准确,锯齿更少。
2)深度学习
ESPCN、SRCNN、FBCNN、DNCNN,一系列CNN,GAN、Diffusion
亚像素的一篇论文分析:实时超分利器:ESPCN与亚像素卷积层详解-优快云博客
FBCNN:https://github.com/jiaxi-jiang/FBCNN?tab=readme-ov-file
DNCNN:https://github.com/cszn/DnCNN
BSRGAN:https://github.com/xinntao/ESRGAN
Diffusion:https://github.com/bahjat-kawar/ddrm-jpeg
感觉图像跟深度学习扯上关系都跟亚像素有关。。
3、亚像素在图像配准中的应用
最简单的应用:jpeg去块效应,虽然不理想但是有用。然后是边缘检测。
图像配准,下面博主说的妙,要多学习。
今天想到总结一下,原因是因为我想要对jpeg图像进行两次压缩,然后合并得到更高质量的图像,无从下手,就随便写写。and今天日报咋整,啥也没有啊!!!!!a !!!!