% 双线性插值 top_left = double(blurry_img(y1, x1, :));下标索引必须为正整数类型或逻辑类型。
时间: 2024-03-03 19:50:55 浏览: 64
这个错误可能是因为 `x1` 或 `y1` 的值小于 1,导致在 `blurry_img(y1, x1, :)` 中出现负数索引。
为了解决这个问题,你可以在计算 `orig_x` 和 `orig_y` 时,先将其减去 0.5,然后再计算 `x1`、`x2`、`y1` 和 `y2`。这样可以保证 `x1` 和 `y1` 的值永远不会小于 1。
修改后的代码示例如下:
```matlab
% 读入待处理的模糊图片
blurry_img = imread('blurry_image.jpg');
% 定义插值比例
scale_factor = 2;
% 获取模糊图片的大小
[h, w, ~] = size(blurry_img);
% 计算处理后的图片大小
new_h = h * scale_factor;
new_w = w * scale_factor;
% 创建处理后的图片
sharp_img = zeros(new_h, new_w, 3);
% 双线性插值
for i = 1:new_h
for j = 1:new_w
% 计算原始图片上的坐标
orig_x = (j - 0.5) / scale_factor;
orig_y = (i - 0.5) / scale_factor;
% 取整
x1 = floor(orig_x);
x2 = ceil(orig_x);
y1 = floor(orig_y);
y2 = ceil(orig_y);
% 计算插值比例
x_ratio = (orig_x - x1) / (x2 - x1);
y_ratio = (orig_y - y1) / (y2 - y1);
% 双线性插值
top_left = double(blurry_img(y1, x1, :));
top_right = double(blurry_img(y1, x2, :));
bottom_left = double(blurry_img(y2, x1, :));
bottom_right = double(blurry_img(y2, x2, :));
top_interp = top_left * (1 - x_ratio) + top_right * x_ratio;
bottom_interp = bottom_left * (1 - x_ratio) + bottom_right * x_ratio;
sharp_img(i, j, :) = top_interp * (1 - y_ratio) + bottom_interp * y_ratio;
end
end
% 显示原始图片和处理后的图片
subplot(1, 2, 1);
imshow(blurry_img);
title('原始图片');
subplot(1, 2, 2);
imshow(uint8(sharp_img));
title('处理后的图片');
```
这段代码在计算 `orig_x` 和 `orig_y` 时,先将其减去 0.5,然后再进行计算。这样可以确保 `x1` 和 `y1` 的值不会小于 1。
阅读全文