1

フォルダーからm * n * p配列にすべての画像を追加しようとしています。画像のサイズが同じではなく、互いに異なることはわかっています。そのため、サイズの不一致エラーが発生しています。

ここに私が実行しようとしているコードがあります

d = dir('c:\test\*.jpg');
fileNames = {d.name};
numElements = numel(fileNames);

Im =imread(fullfile('c:\test\',fileNames{1}));
I = rgb2gray(Im);

sequence = zeros([size(I) numElements], class(I));
sequence(:,:,1) = I;

for k = 2:numElements
    sequence(:,:,k) = rgb2gray(imread(fullfile('c:\test\',fileNames{k})));
end

この問題を解決する方法はありますか?

これを使用してサイズを変更しようとしましが、スケールに基づいてサイズを変更しても問題が解決しないか、縦横比が損なわれる列と行の数に基づいてサイズが変更されます。

配列を初期化してsequence、任意のサイズの画像を受け入れ、それに応じて調整する方法はありますか?

4

2 に答える 2

4

パディングまたはクリッピングによって画像のサイズを変更するだけでは、画像の意味が大幅に歪む可能性がある情報を失ったり、ゼロを追加したりすることを気にしない限り、私にはクレイジーに思えます。(一部の問題では、そのゼロパッドが問題になる可能性があります。)

アップサンプリングまたはダウンサンプリングによっても、情報が失われたり、補間によって不要な機能が画像に追加されたりする可能性があります。内挿の賢明な選択は悪い考えではないと思いますが、その選択は、これらの画像があなたにとって何を意味し、どのように使用するかによって異なります。あなただけがそれらのことを知っています。そしてもちろん、アスペクト比を変更するのはおそらく悪い考えです。

画像を保存したいだけなら、なぜ cell 配列を使用しないのでしょうか? セル配列は、画像のサイズを気にしません。

画像を同じサイズにする必要があるが、アスペクト比の変更を受け入れたくない場合は、ゼロパディングが唯一の選択肢です。ゼロ パッドは実質的に黒のピクセル パッドであることに注意してください。白いピクセルでパディングしたい場合は、1 (または画像のスケーリングに応じて 255) でパディングします。

編集:

セル配列が良い解決策と思われるので、次のようにします。

% Preallocates a cell array
sequence = cell(6,1);

% stuff the images
for k = 1:numElements
    sequence{k} = rgb2gray(imread(fullfile('c:\test\',fileNames{k})));
end

ファイル名に既にセル配列を使用していることに注意してください。中かっこ {} を使用してセル配列にインデックスを付けます。丸括弧 () を使用してセル配列にインデックスを付けることもできるため、注意してください。ただし、その結果は、必要な実際のセル要素ではなく、新しいセル配列になります。

于 2013-08-24T14:52:27.217 に答える
1

元の画像をパディングまたはクリッピングして均一なサイズにするという 2 つの簡単な解決策が考えられます。

(1) すべての画像の特定の最終寸法をピクセル単位で決定します (たとえば、1 つの画像を他のすべてのテンプレートとして使用します)。

(2)代替案 A.寸法の 1 つのサイズがテンプレートの対応するサイズと一致し、もう 1 つのサイズがテンプレートのサイズよりも大きくなるように、すべての画像のサイズを変更します。次に、特大寸法に沿って画像をクリップします。代替の 1 つであるシーム カービングでは、必須ではないピクセルと見なされるものを削除するアルゴリズムを使用します。

代替 B.すべての画像のサイズを変更して、寸法の 1 つのサイズがテンプレート内の対応するサイズと一致し、もう 1 つのサイズがテンプレートのサイズよりも小さくなるようにします。テンプレートのサイズと一致するように、短い寸法に沿って画像をパディングします。

クリッピングのために画像から情報を失う余裕がない場合は、画像をパディングしてサイズを調整しますが、許容できない可能性のある空白が存在します。

于 2013-08-24T14:17:02.397 に答える