保存した画像が白飛びしたようになる問題

15 visualizzazioni (ultimi 30 giorni)
朋貴 熊田
朋貴 熊田 il 1 Ago 2021
Commentato: 朋貴 熊田 il 4 Ago 2021
8bitのbmpファイルを読み込み、ガウシアンフィルタを適応し、原画像から処理後の画像を引き算してその後その画像を保存しました。
しかし、保存した画像がMatlab上で表示されている画像とコントラスとが全く違うものになりました。この問題の原因は何なのでしょうか?写真左が保存した画像で、写真右がMatlab上で表示されてる画像です。
ご教授お願いいたします。
画像の読み込み
img=imread('C:/SNR/slow40s_same.bmp',"bmp");
img2=imread('c:/SNR/slow40s_same2.bmp','bmp');
imshowpair(img,img2,'montage')
ガウシアンフィルタ適応
gusimg=imgaussfilt(img,4.5);
gusimg2=imgaussfilt(img2,4.5);
imshowpair(gusimg,gusimg2,'montage')
imwrite(gusimg,'C:/SNR/gus_slow40s_same.bmp','bmp');
imwrite(gusimg2,'C:/SNR/gus_slow40s_same2.bmp','bmp')
ハイパスフィルタ=イメージからガウス処理(lowpass)したイメージを引く
b=imsubtract(img,gusimg);
b2=imsubtract(img2,gusimg2);
hpassimg=histeq(b);
hpassimg2=histeq(b2);
imshowpair(img,hpassimg,'montage')
title('figure1')
imshowpair(img2,hpassimg2,'montage')
title('figure2')
imwrite(hpassimg,gray,'C:/SNR/hpass_slow40s_same.bmp','bmp');
imwrite(hpassimg2,gray,'C:/SNR/hpass_slow40s_same2.bmp','bmp');
  8 Commenti
Atsushi Ueno
Atsushi Ueno il 3 Ago 2021
自分はhpassimgをMatlab上で表示してある画像と、hpassimgをimwrite()で保存した画像'hpass_slow40s_same.bmp'を(例えばWindowsフォトで)表示して見比べる事をしていないので話が食い違っているのかも知れません。'hpass_slow40s_same.bmp'を再度againに読み込んでMatlab上で表示した画像は同じに見えますがそれでは意味がないのでしょうか?
朋貴 熊田
朋貴 熊田 il 3 Ago 2021
それだと値を変化させて私自身が欲しいと思う画像を保存できないので、そこは一致してもらわないと困ります。

Accedi per commentare.

Risposta accettata

Atsushi Ueno
Atsushi Ueno il 4 Ago 2021
@和神 水ノ江さんが間接的に教えて下さいました。(imshow関数の機能に気付かされ、本質問の原因が判りました)
>この問題(画像が白飛びしたようになる問題)の原因は何なのでしょうか?
⇒ヒストグラム均等化(histeq)が期待通りに動作していない事です。
⇒そして、imshowpair関数がこの本来の原因を隠してしまいました。(後述します)
img=imread('slow40s_same.bmp',"bmp");
gusimg=imgaussfilt(img,4.5);
b=imsubtract(img,gusimg);
hpassimg=histeq(b);
imhist(hpassimg); % 問題画像のヒストグラムを表示⇒0-255に均等化されていない
imshow(hpassimg); % これが本来の画像の見え方(imwriteで保存した画像の見え方と同じ)
imshow(hpassimg,[]); % これが「ピクセル値の範囲に基づいてスケーリングして表示」した結果
つまりこういう事です。imshow関数は上記の「スケーリングして表示する機能」を引数の追加imshow(hpassimg,[])により有効にしますが、imshowpair関数はこのスケーリング機能がデフォルトで適用されます。これが原因です。
  1 Commento
朋貴 熊田
朋貴 熊田 il 4 Ago 2021
回答ありがとうございます。
ヒストグラムの均等化が、0~255までデフォルトで出来ない使用になっている。そのため、その値を引き延ばさず0~255表示してしまうImshowpair()デフォルトの機能によって、表示されている画像と保存した画像に違いが出てしまっているという事なんですね。
解決方としては、ヒストグラムの均等化を正しく行う様にするか、一旦保存した画像を読み込みそれをimshowpair()で表示すればよさそうですね。
ここまで、親身に私自身の問題について付き合って頂きありがとうございます。

Accedi per commentare.

Più risposte (0)

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!