2014-10-10 124 views
-2

这个程序显示原始图像,缩放图像和裁剪图像。但是这个代码是如何缩放图像的。我无法理解这段代码的工作和逻辑。任何人都可以告诉我这段代码的工作原理吗?提前致谢。任何人都可以解释我这个代码的工作

[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

这里的代码首先在坐标中的图像的大小加倍:

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。在完成所有像素的填充之后,填充空白。通过像这样填充空白空白,最终可以获得比仅通过加倍原始像素更好的图像。

+0

感谢您的帮助和编辑。非常感谢 – 2014-10-10 13:45:20

+2

@shiny Ray不要忘记接受最能解决您问题的答案。 – 2014-10-10 13:51:59

+0

这是假设'fin_lena = lena;'这一行实际上应该是更像'fin_lena = conv2(Scale_image,conv_mask,'same')' – Dan 2014-10-10 14:47:05

1

这只是一个非常简单的2倍过采样程序:所有样品之间

  • 插入零获得2倍的图像
  • 将简单的3×3的低通滤波器进行插值
+0

感谢您的全力协助。 – 2014-10-10 13:44:25

相关问题