当我显示重建的图像时,它们只是白色。我的程序有明显错误吗?
重建的图像应该具有上采样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 :(得分:0)
您可以使用B = imresize(A, scale, 'box')
scale
为x
和y
的像素数量的两倍。 z
维度仍具有相同的值。
调整大小的方法box
会将初始像素值(i, j)
复制到其3个新邻居(i+1, j)
,(i, j+1)
和(i+1, j+1)
- 与您的方法相同编程。
答案 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)