任何人都可以解释我这个代码的工作
问题描述:
这个程序显示原始图像,缩放图像和裁剪图像。但是这个代码是如何缩放图像的。我无法理解这段代码的工作和逻辑。任何人都可以告诉我这段代码的工作原理吗?提前致谢。任何人都可以解释我这个代码的工作
[row,col] = size(lena);
Scale_Rows = 2*row;
Scale_Cols = 2*col;
Scale_image = zeros(Scale_Rows,Scale_Cols);
for i= 1:row
for j = 1:col
Scale_image(i*2,j*2) = lena(i,j);
end
end
conv_mask = [ 0.25 0.5 0.25; 0.5 1 0.5; 0.25 0.5 0.25];
fin_lena = lena;
figure;
imshow(fin_lena);
title('Scaled Image');
答
这里的代码首先在坐标中的图像的大小加倍:
for i= 1:row
for j = 1:col
Scale_image(i*2,j*2) = lena(i,j);
end
end
因此,如果原始图像是
A B
C D
然后它变成:
A X B X
X X X X
C X D X
X X X X
其中X
是一个空像素。
然后,代码在(插补)通过根据此服用它周围的像素的组合填充空像素:
conv_mask = [ 0.25 0.5 0.25;
0.5 1 0.5;
0.25 0.5 0.25];
因此,这意味着您采取1:1的重量为你是像素对于任何刚好在上面或侧面的像素为0.5,对于附近的对角线像素为0.25。在完成所有像素的填充之后,填充空白。通过像这样填充空白空白,最终可以获得比仅通过加倍原始像素更好的图像。
答
这只是一个非常简单的2倍过采样程序:所有样品之间
- 插入零获得2倍的图像
- 将简单的3×3的低通滤波器进行插值
+0
感谢您的全力协助。 – 2014-10-10 13:44:25
感谢您的帮助和编辑。非常感谢 – 2014-10-10 13:45:20
@shiny Ray不要忘记接受最能解决您问题的答案。 – 2014-10-10 13:51:59
这是假设'fin_lena = lena;'这一行实际上应该是更像'fin_lena = conv2(Scale_image,conv_mask,'same')' – Dan 2014-10-10 14:47:05