MATLAB Answers

数値データから画像を再現する方法について

10 views (last 30 days)
塁 小熊
塁 小熊 on 16 Jul 2021
Commented: 塁 小熊 on 19 Jul 2021
こんにちは。小熊と申します。
対象から得た[ピクセルのX座標(1~750),ピクセルのY座標(1~480),光強度]というようなスペクトルデータから、MATLAB上で256階調グレースケール画像を生成したいのですがどのようにすればいいでしょうか。
plot scatter stackedplot image など検討したのですが素人の私では上手くいかず、質問をしてアドバイスをいただきたいと考えました。
ちなみに生成した画像はSqueezNetを用いた転移学習に利用します。
下にある画像は700nmのスペクトルデータを抽出したものであり、360000×3のテーブルです。
元のCSVデータだと400~1000nmの5nm刻みなので2(座標)+121(各波長)=123列にも及びます。
一番の理想として、元のCSVデータからMATLABを通して各波長の画像が生成されて、転移学習のデータストア用のファイルに自動で蓄積されていく事ですが、一先ずはこのようなデータから画像を生成出来るのか、またできるとしたらどのようにすれば良いのかを知りたく質問しました。
元のCSVデータは非常にサイズが大きいため添付していませんが、もし必要であれば別途「ギガファイル便」などのサービスを通じて共有したいと思います。
よろしくお願いします。

Accepted Answer

Hernia Baby
Hernia Baby on 16 Jul 2021
Edited: Hernia Baby on 16 Jul 2021
グレースケールの画像については以下の手順が必要だと思っています。
①光度のスケールを統一(正規化)
②画像の形にする
①正規化
 0~1にスケールを合わせて、それをuint8(0~255)にすれば大丈夫です。
②画像の形にする
 ここではそもそも画像がどのようなものになっているかを説明します。
x = linspace(255,0,12);
x = uint8(x);
I = reshape(x,[3,4]);
imshow(I,'InitialMagnification','fit');
 x は0~255のパラメータになっており、それを3×4のサイズで表示しております。
 I のパラメータを数字で見てみましょう。
I
I = 3×4
255 185 116 46 232 162 93 23 209 139 70 0
 つまり@塁 小熊様が行うべきはreshape等によって光の強度を480×750の配列にすることです。
 この形ができれば、imwriteで保存していけば大丈夫かと思います。
  4 Comments
塁 小熊
塁 小熊 on 19 Jul 2021
Herniaさん Uenoさん 返信ありがとうございます。
両方のやり方を試してみました。どちらもうまくいきました!
以下の画像はレタスの反射率データと光強度データから、それぞれ生成しました。
反射率データは数値の幅が0-100なので、256階調において正確に再現されているように見えます。
一方で光強度データは幅が0-4095なので、256階調での表現に無理があるのか白飛びしている箇所が多くなってしまいました。
とは言え画像化する方法に関して理解出来たので、お二方のやり方に工夫を加える等して上記の課題は克服しようと思います。
素人まる出しの質問であったにもかかわらず丁寧にアドバイス頂き、大変助かりました。
ありがとうございました!

Sign in to comment.

More Answers (0)

Tags

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!