画像処理後,面積などを抽出して保存する

101 views (last 30 days)
H.O
H.O on 14 Mar 2021
Commented: H.O on 2 Apr 2021
指定画像を読み込んだあと,
背景処理・2値化 ⇒ 面積等を抽出 ⇒ 値を保存(テキストなど)したいのですが,以下2つのエラーがでます。
どのように修正したらよいでしょうか。
・★エラー(double から structに変換できません。)がでて実行できません
fprintf のところで、'AREA','MajorAxisLength','Centroid'の値を出力できませんでした.
宜しくお願いいたします
%画像,背景画像(8bit)を読み込み
img=imread('IMG001.tif');
imgb=imread('IMGB001.tif'); %背景だけの画像
%背景をカットして二値化
bw=img-imgb; %背景より明るいところを取り出します
bw=double(bw);
BW=imbinarize(bw,50); %50で二値化
%面積などを抽出
AREA=regionprops(BW,'Area');
MajorAxisLength=regionprops(BW,'MajorAxisLength');
Centroid=regionprops(BW,'Centroid');
%保存形式作成
A=[a; AREA; MajorAxisLength; Centroid]; % a = 1などの変数です
%★エラー struct%double から struct に変換できません。
%書き込み
fid = fopen('test.txt','w');
fprintf(fid,'%8s %18s %12s %8s \r\n','a','AREA','MajorAxisLength','Centroid');
fprintf(fid,'%8.1f %18.2f %18.2f %18.2f\n',A);
fclose(fid);
%★fprintf で'AREA','MajorAxisLength','Centroid'の値が出力きません

Accepted Answer

Atsushi Ohashi
Atsushi Ohashi on 16 Mar 2021
regionprops は戻り値が構造体になりますので、fprintfで値を書き込むには構造体の要素を指定します。
BWを求めたあとのサンプルのスクリプトになりますので、ご参照ください。
% Area, MajorAxisLength, Centroidを取得
props = regionprops(BW, 'Area', 'MajorAxisLength', 'Centroid');
% 構造体になっているため、配列の形にまとめる
A = [vertcat(props.Area), vertcat(props.MajorAxisLength), vertcat(props.Centroid)];
% 配列の1行ずつ書き込み
fid = fopen('test.txt','w');
fprintf(fid, '%8s %18s %12s %8s \n', 'a', 'AREA','MajorAxisLength','Centroid');
for n = 1: size(A, 1)
fprintf(fid,'%03d %8.1f %18.2f %18.2f %18.2f\n', n, A(n, :));
end
fclose(fid);
ご質問ではないですが、画像の差分で”ー”マイナスを利用されています。マイナスでも良い場合がありますが、image processingに画像間の差分を取る関数があるので、ご利用いただくと良いと思います。
  6 Comments
H.O
H.O on 2 Apr 2021
isempty、IF文を使ってできるようになりました。 何度もご対応誠にありがとうございました。

Sign in to comment.

More Answers (0)

Products


Release

R2013a

Community Treasure Hunt

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

Start Hunting!