MATLAB Answers

フォルダ内に含まれる全画像の処理

19 views (last 30 days)
竣也 辻本
竣也 辻本 on 26 Oct 2021
Commented: 竣也 辻本 on 2 Nov 2021 at 1:35
フォルダ内に含まれる画像全てを同時に処理する方法を教えてください。
bmpFiles = dir('*.bmp');
numfiles = length(bmpFiles);
mydata = cell(1, numfiles);
for k = 1:numfiles
mydata{k} = imread(bmpFiles(k).name);
imshow(mydata{k}); hold on;
B = mydata{k} > 254; % 二値化
X = 498;
Y = round(mean(rmoutliers(find(B(:,X))))); % y座標(indexの外れ値を除き平均)
xline(X,'Color','w'); % x座標を白い線で表示
yline(Y,'Color','w'); % y座標を白い線で表示
end
現在このようにやろうとしたのですがうまくいっていません

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 26 Oct 2021
【エラーで止まる原因として想定する事】
find(B(:,X))が「0×1 の空の double 列ベクトル」になる場合。つまりその列は全部黒の場合です。その場合、rmoutliers()も空の列ベクトルを、mean()とround()はNaNを返します。白い箇所が見つからなかった場合、直行する白線を描画しない様にすれば止まらなくなります。
if ~isnan(Y)
yline(Y,'Color','w'); % y座標を白い線で表示
end
【他に気になる事】
二値化画像は、RGB成分をそれぞれ二値化した3次元行列になっています。そのままこのプログラムで処理するとR成分についてしか処理しません。下記の様にグレースケール画像に変換してから二値化すべきだと思います。
B = rgb2gray(mydata{k}) > 254;
  1 Comment
竣也 辻本
竣也 辻本 on 2 Nov 2021 at 1:35
ありがとうございます。 補足の部分も参考にさせていただきます。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!