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

2 vues (au cours des 30 derniers jours)
優太
優太 le 9 Juil 2024
Modifié(e) : 優太 le 12 Juil 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文などで簡略的に処理する方法を教えて頂きたいです.よろしくお願いいたします。

Réponse acceptée

Atsushi Ueno
Atsushi Ueno le 9 Juil 2024
Modifié(e) : Atsushi Ueno le 9 Juil 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 commentaire
優太
優太 le 11 Juil 2024
簡略化して処理することが出来ました,いままでcell配列を全く使いこなせていなかったのでとても勉強になりました.ありがとうございました.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur ビッグ データの処理 dans Help Center et File Exchange

Produits


Version

R2024a

Community Treasure Hunt

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

Start Hunting!