質問: findpeaks関数を使って暗い画像の中に存在する広がりのある輝点を検出したいのですが、方法はありますか? 今直面している問題は、例えば列方向にfindpeaksをかけると、複数の列にわたって同じ輝点が列ごとに検出されることと、それが同じ輝点であることが判別しにくい点です。 ad-onとして2dピーク検出のコードがあることは知っていますが、できればfindpeaksで対応したいです。
回答: 試しに簡単なプログラムを作成してみました。行方向と列方向でピークを検出してプロットすると、検出されたピーク点は輝点の上に十字型に表示されます(右図)。ただ、輝点内の輝度分布によっては十字の縦と横の線がきれいなラインにならない場合や、中央でクロスしない場合などがあり、ここから輝点の中心を検出するのは難しい印象です。 もし @ヨナ エマヤ 様が想定されている対象画像を1,2枚共有頂けると、別の方法もご提案可能かと思いますがいかがでしょうか? % 輝点のある画像を作成 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')