1

再構成した画像を表示すると、ただの白です。私のプログラムに明らかに問題がありますか?

2x2再構成された画像は、アップサンプリングされたピクセル ブロック内の 1 つのピクセルでダウンサンプリングされた画像の値を持つ必要があります。ここで使用している補間方法は、1 行上の値を取得して次の行に値を入力し、このプロセスを列に対して繰り返すだけです。

%% 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
4

2 に答える 2

0

とのピクセル量を 2 倍にB = imresize(A, scale, 'box')する aを使用できます。ディメンションは同じ値のままです。scalexyz

サイズ変更方法boxは、初期ピクセル値(i, j)をその 3 つの新しい隣接(i+1, j)(i, j+1)、および(i+1, j+1)- プログラムした同じ方法にコピーします。

于 2013-09-21T22:48:50.487 に答える
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)
于 2013-09-22T11:17:09.907 に答える