ファイルにある画像を​すべて読み取り,画像​を処理し,処理した結​果を配列として出力,​結合させて一つに出力​する.

2 views (last 30 days)
優太
優太 on 9 Jul 2024
Edited: 優太 on 12 Jul 2024
matlabでいままでやっていた画像処理を自動化しようと考えています.
matlabを使いはじめて数週間の初心者なのでご指導のほどよろしくお願いいたします。
現状フォルダの中の画像ファイルを枚数ぶん読み取って画像処理(二値化,領域解析)をしてデータを吐き出すところまでは出来ています.
現状画像処理部分を枚数文書いて処理を行っていますが,枚数がたくさん増えたとき簡単に変えられないので,for文などで簡略的に処理する方法を教えて頂きたいです.よろしくお願いいたします。
close all; % close all figures
clear; % clear all variables
clc; % clear the command terminal
%フォルダから画像読み取り
foldername = "photo";
im_list=dir(foldername);
file_name={im_list.name};
file_name = file_name(~ismember(file_name, {'.', '..'}));
%画像処理の部分
I=imread(fullfile(foldername, file_name{1}));
I_8bit = im2uint8(I);
[BW,maskedImage] = segmentImage(I_8bit);
[BW_out,properties] = filterRegions(BW);
properties2 = struct2table(properties);
d_data1 = properties2.EquivDiameter;
以下この処理を画像の枚数文処理しています.
最終的には縦に結果を結合させてまとめてエクセルに出力しています.(今回は20枚)
d_total = vertcat(d_data1,・・・d_data20); 
現状画像処理部分を枚数文書いて処理を行っていますが,枚数が増えたとき簡単に変えられないので,for文などで簡略的に処理する方法を教えて頂きたいです.よろしくお願いいたします。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 9 Jul 2024
Edited: Atsushi Ueno on 9 Jul 2024
>for文などで簡略的に処理する方法を教えて頂きたいです
画像処理の部分を for 文に入れ、画像処理結果をセル配列に入れれば枚数分処理が回ります。
foldername = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset','5');
im_list = dir([foldername, '/*.png']); % 手で書いた"5"のPNG画像(全部28x28)が1000枚
for n = 1:size(im_list,1)
% 画像処理の部分をforで回す(めんどいから何も書かない)
I{n} = imread(fullfile(im_list(n).folder, im_list(n).name));
end
d_total = vertcat(I{:}) % 1000枚の28x28画像を縦に並べた
  1 Comment
優太
優太 on 11 Jul 2024
簡略化して処理することが出来ました,いままでcell配列を全く使いこなせていなかったのでとても勉強になりました.ありがとうございました.

Sign in to comment.

More Answers (0)

Categories

Find more on ビッグ データの処理 in Help Center and File Exchange

Products


Release

R2024a

Community Treasure Hunt

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

Start Hunting!