フォルダ内に含まれる全画像の処理
5 views (last 30 days)
Show older comments
フォルダ内に含まれる画像全てを同時に処理する方法を教えてください。
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
現在このようにやろうとしたのですがうまくいっていません
0 Comments
Accepted Answer
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;
More Answers (0)
See Also
Categories
Find more on Image Processing Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!