我想分离我用 scipy findpeaks 计算的条纹(红色曲线),我该如何实现。我想将它们分离并存储在文本文件中。
import numpy as np
from scipy.signal import find_peaks
import matplotlib.pyplot as plt
X = np.load('X.npy')
Y = np.load('Y.npy')
P_new = np.load('P_new.npy')
# Example data: Replace with your actual data
T = np.real(P_new) # Simulating a 2D matrix
# Plot the original image
plt.figure()
plt.imshow(T, cmap='jet', aspect='auto')
plt.colorbar()
plt.title('Original Image')
plt.show()
# Peak detection parameters
min_peak_dist = 3 # Minimum distance between peaks
min_peak_h = 3e-5 # Minimum peak height
x_coords = []
y_coords = []
# Process all rows from top to bottom
for k in range(T.shape[0]):
tex = T[k, :]
peaks, _ = find_peaks(tex, distance=min_peak_dist, height=min_peak_h)
if peaks.size > 0:
x_coords.extend(X[k, peaks])
y_coords.extend(Y[k, peaks])
# Plot detected peaks
plt.figure()
plt.scatter(x_coords, y_coords, color='r', s=2) # 's' controls marker size
plt.xlabel('X Coordinate')
plt.ylabel('Y Coordinate')
plt.title('Detected Fringes in Real-World Coordinates')
plt.colorbar()
plt.show()
以前我可以使用 cv2 方法轮廓来完成,_ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE),但这是从查找边缘开始,这对我来说不是很严格,就像查找实际数据的峰值一样。
有人能帮忙吗?谢谢
我使用 取得了合理的成功
HDBSCAN
。我首先运行程序
find_peaks
以查找沿y 轴(而不是沿 x 轴)的峰值 - 这些是黑线。然后我将图像剪切到蓝色方块内,并使用 HDBSCAN 对点进行聚类。最终的聚类结果为彩色。要绘制特定聚类,您可以使用:
解决方案
加载数据并预处理:
聚类并可视化: