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

2 visualizzazioni (ultimi 30 giorni)
優太
優太 il 9 Lug 2024
Modificato: 優太 il 12 Lug 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文などで簡略的に処理する方法を教えて頂きたいです.よろしくお願いいたします。

Risposta accettata

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

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su ビッグ データの処理 in Help Center e File Exchange

Prodotti


Release

R2024a

Community Treasure Hunt

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

Start Hunting!