0

このコマンドを MATLAB で使用すると、イメージが歪んで保持されません。これはなぜですか?

>> b = imread('eight.tif');
>> b2 = imdivide(b,64);
>> bb2 = immultiply(b2,64);
>> imshow(bb2)
>> imshow(b);
4

2 に答える 2

3

uint8(符号なし8ビット)として保存されている画像のピクセルに対して操作を実行しています。
ピクセルを 64 で割ると、基本的に値を 6 (!) ビットだけ右にシフトします。つまり、ピクセルごとに最上位ビットを 2 (1) だけ残します。64 を乗算すると、最下位 6 ビットがゼロで埋められ、データが失われます。


以下に少し例を示します。

>> a = uint8(153); dec2bin(a)
ans =
 0b10011001
>> b = a/64;       dec2bin(b)
ans =
 0b00000010

右側の 6 ビット ( 011001) がすべてなくなっていることに注意してください。左から 2 ビット ( 10) だけが残ります (右にシフトされます)。この除算操作により、データが失われました。
さて、逆に乗算します:

>> c = b*64;       dec2bin(c)
ans =
 0b10000000

右側の 6 ビットはすべて0! 以前の値011001はなくなりました!


Rodyによる別の例:

data = uint8(1:255);

figure(1), clf, hold on

plot(data, data, 'b')
plot(data, data/uint8(64)*uint8(64), 'r')

xlabel('Original Values')
ylabel('Ouptut values')

axis tight
legend('Original color space', 'Color space after integer division/multiply',...
    'Location', 'NorthWest')

ここに画像の説明を入力

于 2013-07-02T05:57:26.433 に答える