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

19 ビュー (過去 30 日間)
H.O
H.O 2021 年 5 月 4 日
コメント済み: H.O 2021 年 5 月 6 日
連番画像(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

採用された回答

Shunichi Kusano
Shunichi Kusano 2021 年 5 月 5 日
次の方法がありそうです。
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 件のコメント
H.O
H.O 2021 年 5 月 6 日
ご丁寧な回答ありがとうございます。 頂いた1, 2 どちらも確認できました。 exportgraphics関数だと、カラーバーやレジェンド等も画像に反映させることができて期待以上でした。 ありがとうございました。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeBlue についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!