Maison  >  Article  >  développement back-end  >  Comment le filtrage maximum local peut-il être utilisé pour identifier les pics de pression dans un tableau 2D représentant la patte d'un chien ?

Comment le filtrage maximum local peut-il être utilisé pour identifier les pics de pression dans un tableau 2D représentant la patte d'un chien ?

DDD
DDDoriginal
2024-11-04 09:25:30717parcourir

How can local maximum filtering be used to identify pressure peaks in a 2D array representing a dog's paw?

Détection des pics dans un réseau 2D

Défi :

Détection des pics dans un réseau 2D représentant les mesures de pression sous la patte d'un chien, pour délimiter les caractéristiques anatomiques sous-régions.

Solution :

La solution pratique consiste à utiliser un filtre maximum local pour identifier les pics. Voici comment :

<code class="python">import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage.filters import maximum_filter
from scipy.ndimage.morphology import generate_binary_structure, binary_erosion

# Define the paw data
paw_data = np.loadtxt("paws.txt").reshape(4, 11, 14)

# Define the 8-connected neighborhood
neighborhood = generate_binary_structure(2, 2)

# Function to detect peaks
def detect_peaks(image):
    # Local maximum filter
    local_max = maximum_filter(image, footprint=neighborhood) == image
    
    # Create a mask of the background
    background = (image == 0)
    
    # Erode the background to remove artifacts
    eroded_background = binary_erosion(background, structure=neighborhood, border_value=1)
    
    # Final mask containing only peaks
    detected_peaks = local_max ^ eroded_background
    
    return detected_peaks

# Detect peaks for each paw
paws = [p.squeeze() for p in np.vsplit(paw_data, 4)]
detected_peaks_list = []
for paw in paws:
    detected_peaks = detect_peaks(paw)
    detected_peaks_list.append(detected_peaks)

# Plot the results
fig, axs = plt.subplots(4, 2, figsize=(10, 10))
for i, paw in enumerate(paws):
    axs[i, 0].imshow(paw)
    axs[i, 0].set_title("Paw Image")
    axs[i, 1].imshow(detected_peaks_list[i])
    axs[i, 1].set_title("Peak Detection")

plt.tight_layout()
plt.show()</code>

Considérations :

  • Cette approche suppose un arrière-plan propre et peut ne pas convenir aux données bruyantes.
  • La taille du quartier devra peut-être être ajustée en fonction de la taille du pic.
  • Une analyse plus approfondie peut impliquer l'utilisation scipy.ndimage.measurements.label pour étiqueter des objets distincts (pics).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn