二維陣列中的峰值檢測

| | | | | | | | | | | | | | | | | | | | | |

我正在幫助一家獸醫診所測量狗爪下的壓力。我使用 Python 進行數據分析,現在我試圖將爪子分成(解剖)子區域。

我做了每個爪子的二維數組,由爪子隨時間加載的每個傳感器的最大值組成。這是一隻爪子的示例,我使用 Excel 繪製了我想要“檢測”的區域。這些是傳感器周圍的 2 x 2 框,具有局部最大值,它們的總和最大。

alt text

所以我嘗試了一些實驗並決定簡單地尋找每列和每行的最大值(由於爪子的形狀,不能朝一個方向看)。這似乎可以很好地“檢測”分開腳趾的位置,但它也標記了相鄰的傳感器。

alt text

那麼告訴 Python 哪些是最好的方法最大值是我想要的嗎?

注意:2x2 方格不能重疊,因為它們必須是分開的腳趾!

我也拿了 2x2為方便起見,歡迎任何更高級的解決方案,但我只是一個人體運動科學家,所以我既不是真正的程序員也不是數學家,所以請保持“簡單”。

這裡"sa 可以用np.loadtxt加載的版本


結果

所以我嘗試了@jextee 的解決方案(見下面的結果)。如您所見,它在前爪上效果很好,但對後腿效果較差。

更具體地說,它無法識別第四趾的小峰。這顯然是循環自上而下朝向最低值這一事實所固有的,而沒有考慮到它在哪裡。

有人知道如何調整@jextee 的算法,以便它也能找到第四個腳趾嗎?

alt text

由於我還沒有處理任何其他試驗,我無法提供任何其他樣本。但是我之前提供的數據是每隻爪子的平均值。這個文件是一個數組,其中包含 9 只爪子的最大數據,按照它們與盤子接觸的順序排列。

這張圖片顯示了它們是如何在空間上分佈在盤子上的。

alt text

更新:

我已經為感興趣的人建立了一個博客我已經設置了一個包含所有原始測量值的 SkyDrive。 所以對任何人來說請求更多數據:給你更多權力!


新的更新:

所以在我得到了關於 的問題的幫助之後爪子檢測爪子分類,我終於能夠檢查每個爪子的腳趾檢測了!事實證明,除了像我自己的例子中那樣大小的爪子外,它在任何東西上都沒有那麼好用。事後看來,這是我自己的錯,如此武斷地選擇了 2x2。

這裡“這是錯誤的一個很好的例子:指甲被識別為腳趾,而“腳跟”太寬了,它被識別了兩次!

alt text

爪子太大,因此採用 2x2 大小且沒有重疊,會導致某些腳趾被檢測到兩次。反之亦然,在小型犬中,它經常找不到第五個腳趾,我懷疑這是由於 2x2 區域太大造成的。

在我的所有測量中嘗試當前的解決方案 我得出了一個驚人的結論,即對於我幾乎所有的小狗來說,它都沒有找到第五個腳趾,在超過 50% 的對大型犬的影響中,它會發現更多!

很明顯我需要改變它。我自己的猜測是將 neighborhood 的大小更改為適合小型犬的較小尺寸和較大尺寸的大型犬。但是 generate_binary_structure 不允許我更改數組的大小。

因此,我希望其他人對定位腳趾有更好的建議,也許有腳趾爪子大小的面積比例?