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

조회 수: 16 (최근 30일)
H.O
H.O 2021년 3월 14일
댓글: H.O 2021년 4월 2일
指定画像を読み込んだあと,
背景処理・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'の値が出力きません

채택된 답변

Atsushi Ohashi
Atsushi Ohashi 2021년 3월 16일
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
Atsushi Ohashi
Atsushi Ohashi 2021년 4월 1일
Aのサイズを確認して空であれば、Aにゼロを代入するIF文を用意するのが良いのではないでしょうか。
サイズ確認はsizeやAが空の確認はisemptyが使えると思いますので下記をご参照ください。
https://jp.mathworks.com/help/matlab/ref/size.html
H.O
H.O 2021년 4월 2일
isempty、IF文を使ってできるようになりました。 何度もご対応誠にありがとうございました。

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

추가 답변 (0개)

제품


릴리스

R2013a

Community Treasure Hunt

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

Start Hunting!