2013-09-21 44 views
1

当我显示重建图像时,它们只是白色。我的程序有明显的问题吗?使用image()和imshow()生成白色图像的MATLAB中的图像上采样

重建的图像应该在上采样的2x2像素块中的一个像素处具有下采样图像的值。我在这里使用的插值方法是简单地从上面一行取值,然后用它填充下一行,为列重复这个过程。

%% Image Resampling 

close all; clear all; clc; 

s_dir=pwd; 
cd Images; 

I=imread('aivazovsky78g.tif','tif'); 

cd(s_dir) 

[N M]=size(I); 

figure; 
imshow(I) 
axis image; hold on; 

for k=1:4 
    pause(1) 
    I=I(1:2:N, 1:2:M); 
    [N M]=size(I); 
    image(I) 
end 

%% Image Reconstruction 

Irec=zeros(2*size(I)); 
for r=1:5 
for n=1:N-1 
    for m=1:M-1 
     Irec(2*n-1,2*m-1)=I(n,m); 
    end 
end 
[N M]=size(Irec); 
for n=2:2:N 
    for m=2:2:M 
    Irec(n,:)=Irec(n-1,:); 
    Irec(:,m)=Irec(:,m-1); 
    end 
end 
I=Irec; 
figure; 
imshow(I) 
end 

回答

0

您可以使用B = imresize(A, scale, 'box'),其中2的scalexy一倍的像素数。尺寸的z仍然具有相同的值。

的调整大小的方法box将初始像素值(i, j)复制到它的3个新邻居(i+1, j)(i, j+1)(i+1, j+1) - 你编程的方法相同。

0

不是最有效的方式,但这里是一个工作代码:

% 256x256 grayscale image 
I = imread('cameraman.tif'); 

% double in size 
I2 = zeros(2*size(I),class(I)); 
for i=1:2:size(I2,1) 
    for j=1:2:size(I2,2) 
     I2([i i+1],[j j+1]) = I((i-1)/2 + 1, (j-1)/2 + 1); 
    end 
end 

% compare against @Magla's solution 
I3 = imresize(I,2,'box'); 
isequal(I2,I3)