一.图片缩小原理
假设原始图像为M*N
,缩小后的图像大小要求为m*n
,需要将图像划分为(M*N)/(m*n)
大小的互不相交的小块,计算小块的平均值,该值作为缩小图像对应的像素值。
如下图所示:
我们把16*16
的图像缩小成4*4
的图像:
这样互不相交的小块的大小为16
.
然后算出小块内的平均值:*
平均值.png在OpenCV
里面图片缩放函数如下:
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
前两个参数分别为输入和输出图像。dsize
表示输出图像的大小。
二. 图像放大原理
上采样原理:图像放大几乎都是采用内插值
的方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素。
插值算法分类:
对插值算法分类一般将插值算法分为传统插值、基于边缘的插值和基于区域的插值3类。
1.传统差值原理和评价
-
最近邻插值也称为
零阶插值
,就是令变化后像素的灰度值等于距它最近的输入像素的灰度值。造成控件的偏移误差为像素单位,计算简单,但不够精确,在新图像中产生明显的锯齿边缘
和马赛克
现象。 -
双线性插值,根据待求点
P
最近的4
个点的像素值,计算出P
点的像素值。双线性插值具有平滑功能,能有效地克服邻插值法的不足,但会退化图像的高频部分,使图像细节变模糊。 -
双三次插值,假设源图像A的大小为
m*n
,放大K倍后的目标图像B的大小为M*N
,即K=M/m
,A图像的每个像素点是已知的,B图像是未知的,我们想要求出图像B中每一个像素点(X,Y)
的值,必须先找出像素(X,Y)
在源图像A中对应的(x,y)
,再根据源图像A
距离像素(x,y)
最近的16
个像素点作为计算目标图像B(X,Y)
处像素值得参数,利用Bicubic
基函数求出16
个像素点的权重,图像B
像素(x,y)
的值就等于16
个像素点的加权叠加。
2.基于边缘的图像插值算法
-
基于原始低分辨率图像边缘的方法:首先检测低分辨率图像的边缘,然后根据检测的边缘将像素分类处理,对于平坦区域的像素,采用传统插值;对于边缘区域的像素,,设计特殊的插值方法,以达到保持边缘细节的目的。
-
基于插值后高分辨率图像边缘的方法:首先采用传统方法插值低分辨率图像,然后检测高分辨率图像的边缘,最后对边缘及附近像素进行特殊处理,以去除模糊,增强图像的边缘。
3.基于区域的图像插值算法
首先将原始低分辨率图像分割成不同区域,然后将插值点映射到低分辨率图像,判断其所属区域,最后根据插值点的邻域设计不同的插值公式,计算插值点的值。
网友评论