GIF 画像は、インデックス付き画像と呼ばれるものです。これは、読み込んだものがカラー マップのインデックスimread
である値であることを意味します。各インデックスは独自の色を生成し、それが GIF 画像の保存方法です。事前定義された色のセットから選択し、GIF 画像の各ピクセルはカラー マップの色の 1 つから取得されます。
最初に画像を RGB に変換する必要があり、ind2rgb
. ただし、 の 2 出力バージョンでは、最初にカラー マップを読み込む必要がありますimread
。uint8
また、次の方法で画像を適切な方法に変換することもできますim2uint8
。
[X,map] = imread('lena.gif');
I = im2uint8(ind2rgb(X,map));
次に行う必要があるのは、@NKN が提案したことです。アルゴリズムをすべてのチャネルに適用する必要があります。
そのため、単純に 3 つのチャネルを持つ出力マトリックスを作成し、アルゴリズムを各平面に個別に適用します。提案できる場合は、ダウンサンプリング後にこの方法でピクセルにアクセスするときに、定義されていない場所 (たとえば (13.8, 25.5) など) を誤って指定しないように、自分floor
または画像の座標を確認してください。round
画像のピクセル位置は整数であるため、座標も整数であることを確認する必要があります。
[X,map] = imread('lena.gif');
I = im2uint8(ind2rgb(X,map));
j = size(I,1); %// Change
k = size(I,2);
x_new = j./2;
y_new = k./2;
x_scale = j./x_new;
y_scale = k./y_new;
M = zeros(x_new,y_new,size(I,3)); %// Change
for jj = 1 : size(I,3) %// Change
for count1 = 1:x_new
for count2 = 1:y_new
M(count1,count2,jj) = I(floor(count1.*x_scale),floor(count2.*y_scale),jj); %// Change
end
end
end
figure,imshow(I);
title('Original Image');
M = uint8(M);
figure,imshow(M);
title('Downsample');
これをテストするためにmandrill
、MATLAB の一部であるデータセットを使用しています。これは、カラー マップが関連付けられたインデックス付きイメージです。これらは偶然にも次の場所に保存されX
ていmap
ます。
load mandrill;
I = im2uint8(ind2rgb(X,map));
変更したコードを実行すると、次の 2 つの図が得られます。

