วิธีการตรวจจับจุดสูงสุด


24

อะไรคืออัลกอริธึมการตรวจจับสูงสุดที่มีอยู่? ฉันมีข้อมูลที่มีเสียงดังและฉันต้องการที่จะใช้การตรวจจับสูงสุดสำหรับข้อมูลนี้ ข้อมูลกลับด้านจริง ๆ แล้วฉันพยายามหาจุดล่าง

นี่คือภาพรวมของข้อมูลใน Excel ฉันชอบที่จะตรวจสอบพื้นทั้งสอง ฉันคิดถึงการส่งข้อมูลผ่านตัวกรอง low-pass และจากนั้นทำค่าเฉลี่ยเคลื่อนที่ซึ่งฉันกำหนดยอดเขาและภายในค่าเฉลี่ยเคลื่อนที่ฉันทำการค้นหาอีกครั้ง ฉันมีพื้นหลังเป็นศูนย์ DSP; นี่เป็นเพียงแนวทางสามัญสำนึก ฉันต้องการได้ยินสิ่งที่ผู้เชี่ยวชาญแนะนำ

ป้อนคำอธิบายภาพที่นี่


2
คุณต้องการตรวจจับสองพื้นผิวอะไร ฉันเห็นเพียงหนึ่งที่ชัดเจนเท่านั้น คุณรู้หรือไม่ว่าคุณมีเสียงแบบไหนหรือมันมาจากไหน?
Jason R

ฉันต้องการทราบว่าคุณต้องการใช้งานกับฮาร์ดแวร์เฉพาะ (ข้อ จำกัด ด้านทรัพยากร) ซึ่งจะส่งผลต่อกลยุทธ์การตรวจจับสูงสุดของฉันหรือไม่
anasimtiaz

@ JasonR สีม่วงชัดเจน อย่างไรก็ตามขอบคมมีค่าผิดปกติ เป็นการดีที่ฉันต้องการที่จะโกนออกและกว่าการคำนวณจุดล่าง (ด้วยเหตุนี้ตัวกรอง LP ในแนวทางของฉัน) สิ่งที่เห็นได้ชัดเจนบนฟ้าเป็นจุดต่ำสุดด้านขวาของจุดสูงสุดสีม่วง สีม่วงไม่ได้เป็นเรื่องที่น่ากังวล แต่เป็นสีฟ้าอ่อน พล็อตของ Excel ไม่ยุติธรรม แต่มาจาก ADC 12 บิตที่ 4096 เป็น 2V
Ktuncer

@anasimtiaz เชื่อหรือไม่ว่ามันจะทำงานบน iPhone / Android ดังนั้นฉันเดาว่าเราพูดได้เหมือนพีซี ไม่มีข้อ จำกัด ด้านฮาร์ดแวร์
Ktuncer

@Kununcer ฉันได้เพิ่มภาพบางส่วนเพื่อให้คุณดูด้วยตัวคุณเอง
Spacey

คำตอบ:


12

อย่างไรก็ตาม, มีหลายวิธีที่คุณสามารถใช้ที่นี่ วิธีการหนึ่งที่ผมอยากจะแนะนำคือการใช้แบบไม่ต่อเนื่องแปลงเวฟเล็ต (DWT) และโดยเฉพาะอย่างยิ่งดูที่Daubechies เวฟ ฉันจะเลือกพูด Daub-14 / Daub-Tetra

โดยทั่วไปสิ่งที่คุณต้องทำจริงๆคือ 'แนวโน้ม' สัญญาณของคุณจากนั้นก็ทำการเลือกขั้นต่ำหรือสูงสุด นั่นจะกำจัดค่าผิดปกติของคุณ การแปลงเวฟเล็ต daub-14 / daub-tetra สามารถช่วยคุณทำสิ่งนี้ได้และสิ่งนี้จะช่วยได้โดยเฉพาะอย่างยิ่งเนื่องจากคุณไม่ทราบลักษณะของสัญญาณของคุณ (โดยใช้ daub-14 คุณสามารถแสดงสัญญาณพหุนามอย่างถูกต้องในระดับ 14/2 = 7 และดูเหมือนว่าคุณไม่ต้องการมากกว่านั้น)

การคำนวณเวฟเล็ตนี้จะแปลงพลังงานของคุณให้เป็นพลังงาน สิ่งบ่งชี้เหล่านั้นแสดงถึงน้ำหนักของเวกเตอร์พื้นฐาน ส่วนที่เหลือของน้ำหนัก (นึกคิด) จะใกล้ศูนย์ เมื่อคุณมีสัญญาณรบกวนในสัญญาณของคุณ (เช่นเดียวกับคุณ) น้ำหนักเหล่านั้นที่ปกติเป็นศูนย์จะมีน้ำหนักบางส่วนในตอนนี้ แต่คุณสามารถลดสัญญาณเหล่านั้นออกและ 'denoise' สัญญาณของคุณ เมื่อเสร็จแล้วคุณสามารถทำการตรวจหา max / min อย่างง่ายได้

มีรายละเอียดเพิ่มเติมที่เกี่ยวข้องคุณอาจส่งอีเมลถึงฉันหากคุณต้องการหารือเกี่ยวกับวิธีการใช้งาน ฉันเคยทำสิ่งนี้มาก่อน

แก้ไข: นี่คือภาพบางส่วนที่แสดงให้เห็น Daub-Tetra Denoiser:

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่


1
ฉันชอบสิ่งนี้ .. มีห้องสมุดอ้างอิงสำหรับเรื่องนี้ใน matlab หรือไม่?
Ktuncer

@Ktuncer ยิงอีเมลมาให้ฉัน
Spacey

4

ฉันยังห่างไกลจากการเป็นผู้เชี่ยวชาญ แต่นี่คือสิ่งที่ฉันจะทำ:

คุณดูเหมือนจะมีสัญญาณที่แตกต่างกันอย่างช้าๆซ้อนทับกับความผันผวน จุดสูงสุดที่คุณค้นหานั้นมีความผันผวนมากขึ้นดังนั้นฉันจะตรวจพบโดยใช้สิ่งนั้น

  1. ให้เป็นสัญญาณดิบของคุณ ใช้ค่าเฉลี่ยเคลื่อนที่มากกว่าจำนวนตัวอย่างที่เหมาะสมเพื่อสร้างผู้ให้บริการที่ราบรื่นX(T)Y(t)

  2. หากคุณประสบความสำเร็จจะต้องมีค่าเฉลี่ยเป็นศูนย์ คำนวณส่วนเบี่ยงเบนมาตรฐานของXYXYσXY

  3. คุณสามารถตรวจพบยอดเขาเมื่อโดยที่เป็น 2, 3, 4|(XY)(t)|>α×σα

สามารถตรวจพบการโอเวอร์โหลดหรือการอันเดอร์โดยการลบค่าสัมบูรณ์และใช้การทดสอบที่เหมาะสม นั่นคือสิ่งที่คุณกำลังมองหา?


1
แนวทางที่น่าสนใจ σคืออะไร (Std. dev?) นอกจากนี้แล้วคณิตศาสตร์กันว่าอะไรคือตรรกะที่อยู่เบื้องหลัง
Ktuncer

@ user4749: ชื่อที่น่าสนใจ :) ตกลง ใช่แล้วคือค่าเบี่ยงเบนมาตรฐาน เราใช้มันเป็นเครื่องวัดความกว้างของความผันผวน ในข้อมูลของคุณมันค่อนข้างคงที่ตลอดเวลาดังนั้นมันบ่งบอกว่ามันเป็นแนวทางที่ถูกต้อง เหตุผลก็คือบอกว่าจุดสูงสุดถูกตรวจพบเมื่อมันมีขนาดใหญ่กว่าความผันผวนเหล่านี้เพื่อให้เรามีความแข็งแกร่งในการตรวจสอบ คุณทำ MATLAB หรือไม่ ถ้าเรามีสัญญาณของคุณอย่างน้อยเราก็สามารถตั้งค่าจุดสูงสุดได้อย่างง่ายดาย σ
Jean-Yves

@ user4749 โดยทั่วไปสิ่งที่เกิดขึ้นที่นี่ Y (t) ของคุณจะเป็นสัญญาณ 'แนวโน้มเท่านั้น' ยังหมายถึงค่าเฉลี่ย ดังนั้นตอนนี้คุณกำลังลบค่าเฉลี่ยสัญญาณของคุณจากสัญญาณ นั่นคือส่วน X (t) - Y (t) ดังนั้นสิ่งที่เหลือคือเสียงของคุณ ทีนี้ (สมมติว่าเสียงของคุณคือเกาส์เซียน) คุณต้องใช้ std, & \ sigma & ตอนนี้ดูที่ค่าทั้งหมดของ abs (x (t) -Y (t))> 4ทำไม? นี่หมายถึงโดยทั่วไปในภาษาอังกฤษ "ทิ้ง 99.99% ของค่าทั้งหมดที่มีแนวโน้มว่าจะเป็นเสียงรบกวนและปล่อยเฉพาะค่าที่ไม่ใช่เพราะเสียง" 4σ
Spacey

@ user4749 สิ่งนี้จะช่วยให้คุณได้รับยอดที่สูงกว่าแม้ว่าฉันไม่แน่ใจว่าจะได้รับยอดเขาโดยรวมที่คุณกำลังมองหา (ฉันสมมติว่าคุณกำลังมองหายอดเขา 'วงกว้าง')
Spacey

1
@ Jean-Yves สวัสดี! :-) คุณกำลังสมมติว่าเสียงเป็น guassian ที่นี่ btw? (นั่นคือเหตุผลที่เราสามารถ std threshold) ฉันอยากรู้ว่าถ้าเสียงเป็นสีอะไร
Spacey

4

การตรวจจับจุดสูงสุดมีแอปพลิเคชั่นค่อนข้างน้อยสำหรับสัญญาณ 1D หรือหลายมิติ นี่คือตัวอย่างเล็ก ๆ น้อย ๆ ที่แสดงว่าสัญญาณเหล่านี้มีความหลากหลายและการตีความจุดสูงสุดสามารถ:

  • ข้อมูล 1D ของโปสเตอร์ต้นฉบับ

  • การแปลงภาพเป็นจุดสูงสุดแต่ละจุดสูงสุดสอดคล้องกับบรรทัดในภาพต้นฉบับ ป้อนคำอธิบายรูปภาพที่นี่

  • ความสัมพันธ์ของภาพอัตโนมัติจุดสูงสุดแต่ละจุดสอดคล้องกับความถี่ที่เผยให้เห็น "รูปแบบเป็นระยะ"; ป้อนคำอธิบายรูปภาพที่นี่

  • "ความสัมพันธ์ทั่วไป" ของภาพและเทมเพลตจุดสูงสุดแต่ละจุดสอดคล้องกับการเกิดขึ้นของเทมเพลตในภาพ (เราอาจสนใจที่จะตรวจสอบเฉพาะจุดที่ดีที่สุดหรือยอดเขาหลายแห่ง)

ป้อนคำอธิบายรูปภาพที่นี่

  • ผลการกรองภาพสำหรับมุมของแฮร์ริสแต่ละจุดสูงสุดตรงกับมุมในภาพต้นฉบับ

ป้อนคำอธิบายรูปภาพที่นี่

เหล่านี้เป็นคำจำกัดความและเทคนิคการตรวจจับของยอดเขาที่ฉันพบ - แน่นอนว่ามีคนอื่นที่ฉันลืมหรือไม่ทราบและหวังว่าคำตอบอื่น ๆ จะครอบคลุมพวกเขา

เทคนิคการประมวลผลล่วงหน้ารวมถึงการทำให้ราบรื่นและ denoising @ คำตอบของ Mohammad นั้นเกี่ยวกับ wavelets และคุณสามารถดูการใช้งานต่าง ๆ ของพวกมันได้ในเอกสารของ Mathematica WaveletThreshold (ซึ่งฉันก็เอาตัวอย่างมาจากทาง)

จากนั้นคุณค้นหา maxima ขึ้นอยู่กับแอปพลิเคชันของคุณคุณต้องการเพียง maxima ทั่วโลก (เช่นการลงทะเบียนภาพ), maxima ท้องถิ่นเพียงไม่กี่ (เช่นการตรวจจับเส้น) หรือ maxima ในท้องถิ่นจำนวนมาก จากนั้นลบภูมิภาครอบ ๆ จุดสูงสุดที่เลือกเป็นต้นจนกว่าค่าสูงสุดที่เหลือจะต่ำกว่าขีด จำกัด หรือคุณสามารถค้นหา maxima ในพื้นที่ภายในขนาดพื้นที่ใกล้เคียงและเก็บเฉพาะค่าสูงสุดในพื้นที่ที่มีค่าสูงกว่าเกณฑ์ - บางคนแนะนำให้รักษา maxima ในพื้นที่ตามระยะทางจนถึงส่วนที่เหลือของ maxima ท้องถิ่น (เพิ่มเติม ดีกว่า) อาร์เซนอลยังมีการดำเนินงานทางสัณฐานวิทยา: การขยายสูงสุดและการเปลี่ยนรูปหมวกสามารถเหมาะสมได้

ดูผลลัพธ์ของสามเทคนิคเหล่านี้ในภาพที่ถูกกรองสำหรับมุมของ Harris:

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้บางแอปพลิเคชันพยายามค้นหาจุดสูงสุดที่ความละเอียดพิกเซลย่อย การแก้ไขซึ่งสามารถใช้เฉพาะแอปพลิเคชันมีประโยชน์

เท่าที่ฉันรู้ไม่มีกระสุนเงินและข้อมูลจะบอกว่าเทคนิคใดทำงานได้ดีที่สุด

มันจะดีมากหากมีคำตอบเพิ่มเติม มาจากสาขาวิชาอื่น


คุณดึงข้อมูลของเนื้อหาคำถามสำหรับการใช้งานของคุณได้อย่างไร ฉันไม่พบมันในรูปแบบที่สะอาด
LéoLéopold Hertz 준영

1
ใช่ฉัน ฉันใช้ตัวอย่างอื่น ดูคำถามอีกครั้งวันนี้ฉันไม่เห็นวิธีการดึงข้อมูลอย่างหมดจดจากคำถาม
Matthias Odisio

-1

ผมคิดว่าวิธีการตรวจสอบยอดหนึ่งโดยทั่วไปคือเช่นนี้ที่เป็น refpeak(bottom)

for i=1,N   {
       if i=1   {  ref=data(i) }
       else { if data(i)<=ref {ref =data(i) }}
}

3
ฉันไม่ได้ลงคะแนนคำตอบของคุณ แต่ฉันคิดว่ามันเป็นเรื่องที่ถูกพิจารณาโดยคนที่ทำ ร่างนี้ตรวจจับขั้นต่ำที่สุดของลำดับ OP กำลังมองหายอดเขาที่หนึ่งต้องจัดการกับสถานที่และเสียงรบกวน
Matthias Odisio

อนิจจาไม่มีการตอบสนองใด ๆ ต่อรางวัล "คำตอบมาตรฐาน" ในส่วนที่เกี่ยวข้องคำตอบทั้งหมดจะเท่าเทียมกัน "ไม่เกี่ยวข้อง"; ฉันได้รับรางวัลสำหรับคำตอบนี้เพราะมันเก่าที่สุด
Matthias Odisio
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.