二次元データのピーク値の検出について

上図のような二次元のデータがある場合に、1~3のようにピーク値を検出する方法はありますでしょうか。
頂点のとがり方や距離はデータ毎に異なるために、閾値を調整できるような手法があるとベストです。
データファイルを添付いたします。ご助言お願いいたします。

 Accepted Answer

Shunichi Kusano
Shunichi Kusano on 6 Nov 2024

0 votes

islocalmax2 という関数があります。いろいろしきい値調整はできますので、一度試してみるといいかもしれません。

6 Comments

HanaHana
HanaHana on 6 Nov 2024
ありがとうございます。早速試そうと思ったのですが、所有のバージョンが2023aのため使えませんでした。1次元のisolocalmaxをうまく利用すれば代替できますでしょうか?
Shunichi Kusano
Shunichi Kusano on 7 Nov 2024
リリース情報記載いただいてましたね。確認しておらずすみません。
そうしますとおっしゃる通りislocalmaxの活用が良さそうです。
行方向と列方向それぞれにスキャンするように適用して、共通して検出できた点を取得する感じでしょうか。斜め方向の情報を加味できないので不完全ではありますが、おおよそ同じような結果になりそうな気はします。
Hiro Yoshino
Hiro Yoshino on 7 Nov 2024
maxk を使うというのもアリかなと思いました
HanaHana
HanaHana on 7 Nov 2024
isolocalmaxですべての行列に行うためにfor文化すると非常に重たくなってしまいます。何か代替案ありますでしょうか?
maxkですと、同じ山の中にある高値を拾ってしまうため、うまくいっておりません。
Shunichi Kusano
Shunichi Kusano on 7 Nov 2024
Edited: Shunichi Kusano on 10 Nov 2024
ピークの大きさはこの値以上にはなる、という値があれば(もしなければ全体最大値の60%などの決め方も有り得るかと思います)、
  1. findでその行番号、列番号を抽出
  2. uniqueで重複削除
  3. for文で抽出した行と列のみ狙う
という流れでだいぶ計算量は削減できそうですがいかがでしょうか。
HanaHana
HanaHana on 11 Nov 2024
具体的なアイデアありがとうございます。
うまくいきそうなため一度試していみたいと思います。ありがとうございました。

Sign in to comment.

More Answers (0)

Products

Release

R2023a

Community Treasure Hunt

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

Start Hunting!