matlab 图像平滑的算法_计算机视觉学习笔记5 图像缩放与插值法

常见的插值方法有四种:最近邻插值法,双线性插值法,双三次插值法,LANCZOS插值法。主要应用场景为:几何变换,透视变换,计算新像素位置等。

一般来讲,图像进行缩放时,原始像素间的相对位置会发生改变,产生几何畸变。比如放大1.6倍,原像素就会向新像素进行映射,此时则会产生小数位的像素,然而像素是不能处理小数位的,所以需要通过插值法计算出新的整数位置的像素值。

常见插值方法介绍

  • 最近邻插值法

顾名思义,就是把距离最近的点的像素值赋予变换后的像素点,简单并且速度快,最常见的默认算法。

  • 双线性插值法

和最近邻不同的是,双线性插值法不仅考虑了最近的点,还将远处的点考虑进去了,分别背对两个方向进行一次线性插值,通过权值计算新像素点的像素值。通常用于信号处理和图像处理方面。

  • 双三次插值法

双三次插值法也叫双立方插值法,比双线性插值法更复杂,会计算矩形网络周围最近的16个采样点,是一个三次多项式。虽然速度慢,但是图像平滑,具有抗锯齿功能。

  • LANCZOS插值法

LANCZOS插值法是一种基于能量场的插值算法,会在新像素周围进行重采样,计算权值,并且通过低通滤波器进行样本之间的平滑。

MATLAB中插值法使用

MATLAB使用imresize进行图像尺寸变换,提供了三种插值方法:最近邻: nearest,双线性:bilinear,双三次:bicubic。

imresize调用格式:B = imresize(A,[numrows numcols],method);代码如下:

clear all;clc;img = imread('football.jpg'); %读入图像img1 = imresize(img, [160, 128]); % 设定为指定尺寸,第一个表示高,第二个表示宽,和相片尺寸正好相反。% 最近临插值img2 = imresize(img, 1.6, 'nearest');% 双线性插值img3 = imresize(img, 1.6, 'bilinear');% 双立方插值img4 = imresize(img, 1.6, 'bicubic');imshow(img);fihguresubplot(1,2,1); imshow(img1);subplot(1,2,2); imshow(img2);figure;subplot(1,2,1); imshow(img3);subplot(1,2,2); imshow(img4);
matlab 图像平滑的算法_计算机视觉学习笔记5 图像缩放与插值法_第1张图片

原图像

matlab 图像平滑的算法_计算机视觉学习笔记5 图像缩放与插值法_第2张图片

尺寸变换 和 最近临插值

matlab 图像平滑的算法_计算机视觉学习笔记5 图像缩放与插值法_第3张图片

双线性插值 和 双三次插值

c++中插值法使用

c++中提供了四种插值方法,使用resize进行尺寸变换,具体实现如下:

#include#includeusing namespace cv;using namespace std;int main(int argc, char** argv) { Mat img = imread("data/images/football.jpg"); int h = img.rows; int w = img.cols; // 最近临插值只考虑最近的点 Mat img1 = Mat::zeros(img.size(), img.type()); resize(img, img1, Size(w * 1.6, h * 1.6), INTER_NEAREST); imshow("最近临插值

你可能感兴趣的:(matlab,图像平滑的算法,线性插值改变图像尺寸)