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

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算出方法についてご教示頂けると助かります。
何卒よろしくお願い申し上げます。

 Respuesta aceptada

Shunichi Kusano
Shunichi Kusano el 24 de Mzo. de 2022

0 votos

複数のデータセットを"ペア"として使いたい場合は、combinedDatastoreという仕組みが使えるかと思います。コードのイメージは次のようになります。
% 各画像フォルダのデータストアを作成
imds1 = imageDatastore('folder1');
imds2 = imageDatastore('folder2');
% combinedDatastoreを作成
cds = combine(imds1,imds2);
% 下記をデータセット分繰り返す
% データをペアで読み込む
data = read(cds);
% SSIMによる評価値を算出
value = ssim(data{1},data{2});

3 comentarios

弘達 土亀
弘達 土亀 el 27 de Mzo. de 2022
質問に対するコードを教えて頂きありがとうございます。
フォルダ1とフォルダ2にそれぞれ1~15枚のpng画像を封入して、
上記のコードを実行したところvalueは1つしか出力されませんでした。
この結果は平均の値でしょうか。
できれば1~15、それぞれのSSIMを算出したいと考えております。
% 下記をデータセット分繰り返す
これは15個データがある場合は、15回繰り返すという事でしょうか。
できれば、一括でSSIMの結果が15個出力できるようにしたいと考えています。
恐れ入りますが、ご教示頂けると助かります。
何卒宜しくお願い致します。
Shunichi Kusano
Shunichi Kusano el 28 de Mzo. de 2022
dlarray型で入力を作れば複数画像ペアの一括計算ができますが(詳しくはこちら)、dlarrayにわざわざ変換するよりもfor文やwhile文を使って1個ずつ処理した方がコード量も少なく済むかと思います。
values = []; % 出力用変数の確保
while hasdata(cds) % 読み込めるデータがある限り
% データをペアで読み込む
data = read(cds);
% SSIMによる評価値を算出して出力に追加
values = [values ssim(data{1},data{2})];
end
弘達 土亀
弘達 土亀 el 28 de Mzo. de 2022
詳細に説明して頂きありがとうございました。
15個のデータを一括で算出することが出来ました。
今後とも何卒宜しくお願い致します。

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Preguntada:

el 24 de Mzo. de 2022

Comentada:

el 28 de Mzo. de 2022

Community Treasure Hunt

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

Start Hunting!