カラーレンジを反映して画像を保存する

19 views (last 30 days)
H.O
H.O on 4 May 2021
Commented: H.O on 6 May 2021
連番画像(8bit)を読み込み,指定のカラ―レンジを反映させてカラー画像として保存したいです.
やりたいこと
①.表示上のカラーレンジの指定
②.閾値以下の値をノイズとして黒にする.
 (⇒カラーレンジを0~255とすると.10以下をすべて黒色に変換する)
③.①②を反映した画像を保存する.
下記のスクリプトを例として修正したいと思います.
for n= 1:5
IMG = imread (['アドレス\No',num2str(n),'.tif']); %画像読みこみ..IMGは8bit
%保存時に反映したいレンジ★
colormap(jet)
cmin = 50;
cmax = 255;
caxis([cmin cmax]);
colorbar
%画像保存.この設定だとカラーレンジは自動=0~255(MIN MAX).↑★の設定は反映されない
newmap=colormap(jet);
imwrite(IMG,newmap,['アドレス\Color_No',num2str(n),'.tif']);
end

Accepted Answer

Shunichi Kusano
Shunichi Kusano on 5 May 2021
次の方法がありそうです。
1.exportgraphics関数を使う
 この方法だとfigureで表示したままの絵が保存できますし、簡単です。が、こちらで試してみたところ axis offにしてもわずかですが周囲に背景色が残ってしまいます。試してみて気になるようであれば次の方法が良いかと思います。
2.インデックス付きイメージとして保存
 詳しくは公式ドキュメントの通りですが、やり方としての手順は次の通りです。
  1. 50-255をインデックス付きイメージに変換(0-1にrescaleして205倍して+1する)
  2. 元の画像で10以下のところを0に。
  3. [0 0 0;jet(206)]でカラーマップを作成
  4. imwriteで上記インデックス画像とカラーマップを保存
% パラメータ決定
cmin = 50;
cmax = 200;
th = 10;
% リスケールしてインデックス画像に変換
imq = rescale(im,"InputMin",cmin,"InputMax",cmax);
imq = uint8(imq * (cmax-cmin)) + 1;
imq(im <= th) = 0; % ノイズ処理
% カラーマップの定義(ゼロは黒、それ以外はjet)
cmap = [0 0 0;jet(cmax-cmin+1)];
% 保存
imwrite(imq,cmap,'test.png');
  1 Comment
H.O
H.O on 6 May 2021
ご丁寧な回答ありがとうございます。 頂いた1, 2 どちらも確認できました。 exportgraphics関数だと、カラーバーやレジェンド等も画像に反映させることができて期待以上でした。 ありがとうございました。

Sign in to comment.

More Answers (0)

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!