画像内の余分なところを除いて新しい行列にしたい
Afficher commentaires plus anciens
Réponse acceptée
Plus de réponses (2)
michio
le 23 Jan 2017
上記の「添字による代入の次元が一致しません。」というエラーですが、
grayscale(:,:,k) = imread(tifFiles(k).name);
の実行において grayscale は 67×67×numfiles の配列ですが、imread で読み取られる画像サイズが 256×256 となっており、配列のサイズが合致していないことが原因です。
for k = 2:numfiles
img = imread(tifFiles(k).name);
grayscale(:,:,k) = img(58:124, 110:176);
end
と配列のサイズを合わせて grayscale に代入してやってください。
また、もし余分なところを取り除いた後に残る中心部分の画像のサイズが事前に分かっていれば、下記の方法が使えるかなと。
5x5の2次元配列から、100である部分を除いて3x2の配列を取り出しているサンプルになります。
% サンプルデータ(周囲が値100で囲まれた 3x2 の画像)
imag1 = 100*ones(5,5);
imag1(2:4,2:3) = rand(3,2)
copy = imag1;
% 100の値を持つ要素を削除
% 中心部分のデータが抽出できますが、すべての要素が
% 一列に並んだベクトルとして(ここでは 1x6 のベクトル)でてきます。
copy(copy==100) = [];
% 一列に並んだデータを2次元に並べ替え (ここで、事前に中心部分の画像サイズが必要)
imag2 = reshape(copy,3,2)
下記を実行して、変数 row や clm などの値を確認してみてください。
また、
copy(:,row) = []; % 要素がすべて1の行を削除
など、= [] で対応する要素を削除することができることを利用します。
% サンプルデータ(周囲が値100で囲まれた 3x2 の画像)
imag1 = 100*ones(5,5);
imag1(2:4,2:3) = rand(3,2)
copy = imag1;
% 100の値を持つ要素位置に1をもった論理配列を作成
idx = copy == 100
row = all(idx,1); % 要素が全て1の行を検出
clm = all(idx,2); % 要素が全て1の列を検出
copy(:,row) = []; % 要素がすべて1の行を削除
copy(clm, :) = [];% 要素がすべて1の列を削除
copy
1 commentaire
thuru
le 23 Jan 2017
Catégories
En savoir plus sur Graphics Performance dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!