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

조회 수: 2 (최근 30일)
優太
優太 2024년 7월 9일
편집: 優太 2024년 7월 12일
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文などで簡略的に処理する方法を教えて頂きたいです.よろしくお願いいたします。

채택된 답변

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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 ビッグ データの処理에 대해 자세히 알아보기

제품


릴리스

R2024a

Community Treasure Hunt

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

Start Hunting!