matlab实现图像双线性插值
时间: 2023-11-02 09:17:56 浏览: 122
以下是matlab实现图像双线性插值的代码:
```matlab
% 读取原始图像
img = imread('lena.bmp');
% 缩小倍数
scale = 0.5;
% 缩小后的图像大小
new_size = floor(size(img) .* scale);
% 初始化缩小后的图像
new_img = zeros(new_size(1), new_size(2), size(img, 3));
% 计算缩放后的坐标系
[X, Y] = meshgrid(1:new_size(2), 1:new_size(1));
x = X ./ scale;
y = Y ./ scale;
% 双线性插值
for i = 1:new_size(1)
for j = 1:new_size(2)
x1 = floor(x(i, j));
x2 = x1 + 1;
y1 = floor(y(i, j));
y2 = y1 + 1;
if x2 > size(img, 2)
x2 = size(img, 2);
end
if y2 > size(img, 1)
y2 = size(img, 1);
end
if x1 < 1
x1 = 1;
end
if y1 < 1
y1 = 1;
end
f11 = double(img(y1, x1, :));
f12 = double(img(y1, x2, :));
f21 = double(img(y2, x1, :));
f22 = double(img(y2, x2, :));
x1_weight = (x2 - x(i, j)) / (x2 - x1);
x2_weight = (x(i, j) - x1) / (x2 - x1);
y1_weight = (y2 - y(i, j)) / (y2 - y1);
y2_weight = (y(i, j) - y1) / (y2 - y1);
new_img(i, j, :) = ...
x1_weight * y1_weight * f11 ...
+ x2_weight * y1_weight * f12 ...
+ x1_weight * y2_weight * f21 ...
+ x2_weight * y2_weight * f22;
end
end
% 显示原始图像和双线性插值后的图像
figure;
subplot(1, 2, 1);
imshow(img);
title('原始图像');
subplot(1, 2, 2);
imshow(uint8(new_img));
title('双线性插值后的图像');
```
该代码首先读取了一张原始图像,然后指定了一个缩小倍数,并根据缩小倍数计算了缩小后的图像大小。接着,代码使用`meshgrid`函数生成了缩放后的坐标系,并根据双线性插值公式对每个像素进行插值。最后,将原始图像和插值后的图像显示在一起,以进行比较。
阅读全文