保存した画像が白飛びしたようになる問題
10 views (last 30 days)
Show older comments
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 Comments
Atsushi Ueno
on 3 Aug 2021
自分はhpassimgをMatlab上で表示してある画像と、hpassimgをimwrite()で保存した画像'hpass_slow40s_same.bmp'を(例えばWindowsフォトで)表示して見比べる事をしていないので話が食い違っているのかも知れません。'hpass_slow40s_same.bmp'を再度againに読み込んでMatlab上で表示した画像は同じに見えますがそれでは意味がないのでしょうか?
Accepted Answer
Atsushi Ueno
on 4 Aug 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関数はこのスケーリング機能がデフォルトで適用されます。これが原因です。
More Answers (0)
See Also
Categories
Find more on 基本的な表示 in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!