有人向我解释这段代码的工作原理

时间:2014-10-10 13:25:31

标签: matlab image-processing

此程序显示原始图像,缩放图像和裁剪图像。但是这段代码是如何缩放图像的。我无法理解这段代码的工作原理和逻辑。这里有人能告诉我这段代码是如何工作的吗?提前谢谢。

[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');

2 个答案:

答案 0 :(得分:2)

此处的代码首先将坐标的图像大小加倍:

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,对于紧靠上方或侧方的任何像素为0.5,对于附近的对角线像素为0.25。在对所有像素执行此操作之后,填充间隙。通过填充这样的空白间隙,您最终会获得比原始像素加倍的更好看的图像。

答案 1 :(得分:1)

只是一个非常简单的2 x上采样例程:

  • 在所有样本之间插入零以获得2x图像
  • 应用简单的3x3低通滤波器进行插值