オブジェクトの検出

조회 수: 7 (최근 30일)
雅樹 片山
雅樹 片山 2021년 8월 26일
댓글: 雅樹 片山 2021년 8월 30일
画像は密封小線源をイメージングプレートを用いて画像化したものです。
線源が15個並んでおり、長方形の高濃度の部分が線源になります。
この画像からそれぞれの線源部分を検出することが目的です。
個々の線源に濃度差があり、閾値を用いた二値化ができず、また、境界が不明瞭なため、エッジの検出がうまくいきません。
データが少ないため、単純なアルゴリズムでのオブジェクトの検出ができればと考えているのですがどういった方法が考えられるでしょうか。

채택된 답변

Atsushi Ueno
Atsushi Ueno 2021년 8월 28일
편집: Atsushi Ueno 2021년 8월 29일
線源を串刺しにする様な1次元画素列の極小値(局所的最小値)(グラフで表示)を得る事により、線源の縦方向の位置を検出しました。
  • この回答は極小値を用いるアイデアであり、エッジ検出等の画像処理はしていません
  • 的確な極小値検出の為の「フィルタ関数」と「局所的最小値の検出関数」を使いました
  • 汎用性に乏しくマジックナンバーが多いです。パラメータや閾値は適宜調整してみて下さい
I = rgb2gray(imread('radio.jpeg'));
C = I(:, round(size(I,2)/2)); % 中央に線源がある前提で、画像中央の1列を抽出
C = filter(ones(1,7)./7,1,C); % 的確な極小値検出の為のフィルタ処理
TF = islocalmin(C) & (C < 200); % 適当な輝度範囲の極小値検出
y = 1:size(I,1);
yy = y(TF); % 極小値検出した線源15本分の縦方向座標
BW = I < 240; % 2値化(imbinarize)
[xx, ~] = ind2sub(size(BW(TF,:)'), find([zeros(size(yy,2),1),diff(BW(TF,:),1,2)]')); % 線源の両端座標(横方向)を取得
imshow(I); xlim([0 255]); hold on; % 以下は各種描画
plot(C,y,C(TF),y(TF),'r*');
for i = 1:size(yy,2)
rectangle('Position',[xx(i*2-1) yy(i)-7 xx(i*2)-xx(i*2-1) 14],'Curvature',0.5);
end
  댓글 수: 3
Atsushi Ueno
Atsushi Ueno 2021년 8월 29일
@H.Nishiyama様、ありがとうございます。横方向のズレは原因が分からないでいました。
縦方向にも僅かにズレているのですが、これはフィルタ処理が原因です。
雅樹 片山
雅樹 片山 2021년 8월 30일
こちらの手法で解析を進めたいと思います。
回答ありがとうございました。

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

추가 답변 (0개)

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!