MATLAB编程实现最近邻插值和双线性插值
时间: 2023-09-12 17:11:46 浏览: 186
最近邻、双三次、双线性插值,最近邻插值法和双线性插值法,matlab
5星 · 资源好评率100%
最近邻插值:
```matlab
function img_out = nearest_interp(img_in, scale)
% img_in:输入图像
% scale:缩放比例
[m, n, c] = size(img_in); % 获取输入图像的大小和通道数
m_new = floor(m * scale); % 计算缩放后的行数
n_new = floor(n * scale); % 计算缩放后的列数
img_out = zeros(m_new, n_new, c); % 初始化输出图像
for i = 1:m_new
for j = 1:n_new
% 计算在原图像中的位置
x = floor(i / scale);
y = floor(j / scale);
if x == 0
x = 1;
end
if y == 0
y = 1;
end
if x > m
x = m;
end
if y > n
y = n;
end
% 最近邻插值
img_out(i, j, :) = img_in(x, y, :);
end
end
img_out = uint8(img_out);
end
```
双线性插值:
```matlab
function img_out = bilinear_interp(img_in, scale)
% img_in:输入图像
% scale:缩放比例
[m, n, c] = size(img_in); % 获取输入图像的大小和通道数
m_new = floor(m * scale); % 计算缩放后的行数
n_new = floor(n * scale); % 计算缩放后的列数
img_out = zeros(m_new, n_new, c); % 初始化输出图像
for i = 1:m_new
for j = 1:n_new
% 计算在原图像中的位置
x = i / scale;
y = j / scale;
x1 = floor(x);
x2 = x1 + 1;
y1 = floor(y);
y2 = y1 + 1;
if x1 == 0
x1 = 1;
x2 = 2;
end
if y1 == 0
y1 = 1;
y2 = 2;
end
if x2 > m
x1 = m - 1;
x2 = m;
end
if y2 > n
y1 = n - 1;
y2 = n;
end
% 双线性插值
f11 = double(img_in(x1, y1, :));
f12 = double(img_in(x1, y2, :));
f21 = double(img_in(x2, y1, :));
f22 = double(img_in(x2, y2, :));
img_out(i, j, :) = uint8((f11 * (x2 - x) * (y2 - y) + f21 * (x - x1) * (y2 - y) ...
+ f12 * (x2 - x) * (y - y1) + f22 * (x - x1) * (y - y1)) / ((x2 - x1) * (y2 - y1)));
end
end
end
```
阅读全文