質問: imresize3(imds, [227 227 3]); しかし、以下のエラーが出てしまいます。 error using imresize3 expected input number 1, v, to be one of these types: single, double, int8, int16, int32, uint8, uint16, uint32 instead its type was matlab.io.datastore.imagedatastore. 原因がお分かりの方はご教示頂けますと幸いです。 どうぞよろしくお願いいたします。
回答: function resized = rs227(filename) % 画像を読むこむ。指定の画像がimreadで読み取れなければ、ちがう関数で読み込んでください i = imread(filename); % 1チャンネル目にある値を第2、3チャンネルにそのままコピー %catの直後の3は、チャンネルの深さ方向という意味 %チャンネル数が増える方向にiを3つ分重ねる i = cat(3,i,i,i); % 画像を227x227へリサイズ resized = imresize(i, [227 227]); end 添付したコード(上)をrs227という名前で保存して、同じディレクトリにおいて置き、さらに下のコードをimdsresized = imresize3(imds, [227 227 3]);の代わりに打てばうまくリサイズできると思います。dicomファイルがimreadで読めない場合は、適切な関数で読み込んでください。 imresize3は、3次元的なデータを拡大、縮小するイメージで、1次元の画像をそのままコピーして、3次元にするときには使えないように思います。dicomファイルというのは、画像的な扱いをするのでしょうか? それともボリュームデータのような感じなのでしょうか。いずれにせよ、その扱い次第で、上の関数の中を変更させれば実行できると思います。メインのコマンドのほうには下のコードを書いてください。 imds = imagedatastore(fullfile(currentdirectory, categories),'includesubfolders',true,'fileextensions','.dcm','labelsource', 'foldernames','readfcn',@dicomread); %この下の1行を追加、もとのimresize3の行は消去 imds.readfcn = @(filename)rs227(filename);