4

平均ゼロのガウス加法性ノイズによって破損した .jpg 画像を平均化したいと考えています。いろいろと調べてみたところ、画像行列を追加して、その合計を行列の数で割ることがわかりました。ただし、結果として得られる画像は完全に黒です。通常、画像の数が増えると、結果の画像は良くなります。しかし、より多くの画像を使用すると、暗くなります。

800x600 の白黒 .jpg 画像を使用しています。使用したスクリプトは次のとおりです。

image1 = imread ('PIC1.jpg');
image2 = imread ('PIC2.jpg');
image3 = imread ('PIC3.jpg');
image4 = imread ('PIC4.jpg');

sum = image1 + image2 + image3 + image4; 
av = sum / 4; 
imshow(av);
4

3 に答える 3

10

問題はおそらく、画像データがすべて typeuint8であるため、それらをすべて加算すると、ピクセル値の値が 255 で飽和し、ほとんどが白の画像になり、次に で割るとほとんどが黒に見えることです。画像の数。画像を などの別のデータ型にdouble変換し、平均化を実行してから、 に戻す必要がありuint8ます。

% Load your images:
image1 = imread('PIC1.jpg');
image2 = imread('PIC2.jpg');
image3 = imread('PIC3.jpg');
image4 = imread('PIC4.jpg');

% Convert the images to type double and sum them:
imageSum = double(image1) + double(image2) + double(image3) + double(image4);

% Divide by the number of images and convert back to type uint8:
averageImage = uint8(imageSum./4);

% Display the averaged image:
imshow(averageImage);

補足:問題や混乱を引き起こす可能性があるため、変数に既存の関数と同じ名前を付けることは避けてください。sumこれが、変数をimageSum(組み込み関数がある)に変更した理由ですsum

于 2010-03-15T19:21:32.803 に答える
7

画像処理ツールボックスのIMLINCOMBを使用した代替ソリューション:

I = imlincomb(0.25,I1, 0.25,I2, 0.25,I3, 0.25,I4);
于 2010-03-15T23:52:49.023 に答える
2

imagesc(averageImage); も使用できます。この機能は画像を自動スケーリングし、黒く表示されません

于 2012-11-18T04:48:50.917 に答える