findpeaks関数を使って暗い画像の中に存在する広がりのある輝点を検出したいのですが、方法はありますか?
27 ビュー (過去 30 日間)
古いコメントを表示
今直面している問題は、例えば列方向にfindpeaksをかけると、複数の列にわたって同じ輝点が列ごとに検出されることと、それが同じ輝点であることが判別しにくい点です。
Ad-onとして2Dピーク検出のコードがあることは知っていますが、できればfindpeaksで対応したいです。
2 件のコメント
Akira Agata
2021 年 6 月 14 日
findpeaks 関数を使いたい理由が何かあるということでしょうか?
輝点を検出したいということであれば、ある輝度値を閾値として画像を2値化するのがいちばん単純な方法になるかと思います。
回答 (1 件)
Akira Agata
2021 年 6 月 16 日
編集済み: Akira Agata
2021 年 6 月 16 日
試しに簡単なプログラムを作成してみました。行方向と列方向でピークを検出してプロットすると、検出されたピーク点は輝点の上に十字型に表示されます(右図)。ただ、輝点内の輝度分布によっては十字の縦と横の線がきれいなラインにならない場合や、中央でクロスしない場合などがあり、ここから輝点の中心を検出するのは難しい印象です。
% 輝点のある画像を作成
I = imread('coins.png');
I = imgaussfilt(I,10);
% findpeaksで行,列それぞれの方向のピークを検出
J = false(size(I));
for kk = 1:size(I,2)
[~, pt] = findpeaks(double(I(:,kk)),...
'MinPeakProminence',50);
J(pt,kk) = true;
end
for kk = 1:size(I,1)
[~, pt] = findpeaks(double(I(kk,:)),...
'MinPeakProminence',50);
J(kk,pt) = true;
end
% 元画像と検出した行,列各方向のピーク位置を表示
imshowpair(I,J,'montage')
参考
カテゴリ
Help Center および File Exchange で 記述統計 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!