オブジェクトの検出

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

Risposta accettata

Atsushi Ueno
Atsushi Ueno il 28 Ago 2021
Modificato: Atsushi Ueno il 29 Ago 2021
線源を串刺しにする様な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 Commenti
Atsushi Ueno
Atsushi Ueno il 29 Ago 2021
@H.Nishiyama様、ありがとうございます。横方向のズレは原因が分からないでいました。
縦方向にも僅かにズレているのですが、これはフィルタ処理が原因です。
雅樹 片山
雅樹 片山 il 30 Ago 2021
こちらの手法で解析を進めたいと思います。
回答ありがとうございました。

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2021a

Community Treasure Hunt

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

Start Hunting!