フォルダでのSSIM算出について

2 ビュー (過去 30 日間)
弘達 土亀
弘達 土亀 2022 年 3 月 24 日
コメント済み: 弘達 土亀 2022 年 3 月 28 日
Reference画像に対して複数枚の画像(比較画像)と
ssimを行う場合に教えて頂い下記のコードを使用しています。
% 参照画像読み込み
>> I = imread('cameraman.tif');
% imgs フォルダには 複数枚の画像が入っていると仮定します
% イメージデータストアの作成
>> imds = imageDatastore('imgs');
% ReadFcn で ssim() 関数を実行 (ファイルを読み込む時点でReadFcnが実行される)
>> imds.ReadFcn = @(filename) ssim(I, imread(filename))
% imgsフォルダ内の画像群に対して ssim() を実行
>> readall(imds)
今回はReference画像の1~10と比較画像1~10のSSIM算出を一括で行いたい考えています。
※全部で10この結果を求めたいと思っています。
Reference画像と比較画像のフォルダを作成して比較したいと考えていますが、よくわかりません。
フォルダ同士でのSSIM算出方法についてご教示頂けると助かります。
何卒よろしくお願い申し上げます。

採用された回答

Shunichi Kusano
Shunichi Kusano 2022 年 3 月 24 日
複数のデータセットを"ペア"として使いたい場合は、combinedDatastoreという仕組みが使えるかと思います。コードのイメージは次のようになります。
% 各画像フォルダのデータストアを作成
imds1 = imageDatastore('folder1');
imds2 = imageDatastore('folder2');
% combinedDatastoreを作成
cds = combine(imds1,imds2);
% 下記をデータセット分繰り返す
% データをペアで読み込む
data = read(cds);
% SSIMによる評価値を算出
value = ssim(data{1},data{2});
  3 件のコメント
Shunichi Kusano
Shunichi Kusano 2022 年 3 月 28 日
dlarray型で入力を作れば複数画像ペアの一括計算ができますが(詳しくはこちら)、dlarrayにわざわざ変換するよりもfor文やwhile文を使って1個ずつ処理した方がコード量も少なく済むかと思います。
values = []; % 出力用変数の確保
while hasdata(cds) % 読み込めるデータがある限り
% データをペアで読み込む
data = read(cds);
% SSIMによる評価値を算出して出力に追加
values = [values ssim(data{1},data{2})];
end
弘達 土亀
弘達 土亀 2022 年 3 月 28 日
詳細に説明して頂きありがとうございました。
15個のデータを一括で算出することが出来ました。
今後とも何卒宜しくお願い致します。

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

その他の回答 (0 件)

Community Treasure Hunt

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

Start Hunting!