添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

import scipy.ndimage as ndimage

import scipy.ndimage.filters as filters

import matplotlib.pyplot as plt

fname = '/tmp/slice0000.png'

neighborhood_size = 5

threshold = 1500

data = scipy.misc.imread(fname)

data_max = filters.maximum_filter(data, neighborhood_size)

maxima = (data == data_max)

data_min = filters.minimum_filter(data, neighborhood_size)

diff = ((data_max - data_min) > threshold)

maxima[diff == 0] = 0

labeled, num_objects = ndimage.label(maxima)

slices = ndimage.find_objects(labeled)

x, y = [], []

for dy,dx in slices:

x_center = (dx.start + dx.stop - 1)/2

x.append(x_center)

y_center = (dy.start + dy.stop - 1)/2

y.append(y_center)

plt.imshow(data)

plt.savefig('/tmp/data.png', bbox_inches = 'tight')

plt.autoscale(False)

plt.plot(x,y, 'ro')

plt.savefig('/tmp/result.png', bbox_inches = 'tight')

给定data.png:

上面的程序产生了threshold.png,阈值为1500.降低阈值以获取更多的局部最大值:

参考文献:

import numpy as npimport scipyimport scipy.ndimage as ndimageimport scipy.ndimage.filters as filtersimport matplotlib.pyplot as pltfname = '/tmp/slice0000.png'neighborhood_size = 5threshold = 1500data... 简单,快速的 2D 查找器。 目的是要比更复杂的技术更快,但又足以在嘈杂的数据中找到峰 。 该代码分析嘈杂的 2D 图像,并使用鲁棒的 局部 最大值 查找器(1像素分辨率)或加权质心(子像素分辨率)查找峰 。 该代码被设计为尽可能快,因此我将其保持为基本。 当使用uint16 \ uint8图像时,它最好工作,并假定峰 相对稀疏。 该代码需要Matlab的“图像处理工具箱”,并且可以在parfor中使用,以加快处理速度。 请引用为: 纳坦(2021)。 快速 2D 峰查找器( https://www.mathworks.com/matlabcentral/fileexchange/37388-fast- 2d -peak-finder),MATLAB中央文件交换。 检索2021年5月26日 代码的工作原理:从理论上讲,每个峰都是一个平滑点扩展函数(SPF),例如某种大小的高斯等。
给定M行N列的整数 矩阵 A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是 矩阵 局部 极大值 。本题要 给定 矩阵 的全部 局部 极大值 及其所在的位置。 输入格式: 输入在第一行中给出 矩阵 A的行数M和列数N(3≤M,N≤20);最后M行,每行给出A在该行的N个元素的 。数字间以空格分隔。 输出格式: 每行按照“元素 行号 列号”的格式输出一个 局部 极大值 ,其中行、列编号从1开始。要 按照行号递增输出;若同行有 超过 1个 局部 极大值 ,则该行按列号递增输出。若没有 局部 极大值 ,则输出“No
Description:给定M行N列的整数 矩阵 A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是 矩阵 局部 极大值 。本题要 给定 矩阵 的全部 局部 极大值 及其所在的位置。 Input:输入在第一行中给出 矩阵 A的行数M和列数N(3≤M,N≤20);最后M行,每行给出A在该行的N个元素的 。数字间以空格分隔。 Output:每行按照“元素 行号 列号”的格式输出一个...
rows,lines = map(int,input().split()) grid = [[] for i in range(rows)] for i in range(rows): line = list(input().split()) for j in range(lines): grid[i].append(int(line[j])) flag = 0 for i in range(rows): if(i!=0 and i!=row # 遍历 矩阵 for i in range(, rows - window_size + 1, stride): for j in range(, cols - window_size + 1, stride): # 获取 当前窗口内的子 矩阵 window = matrix[i:i+window_size, j:j+window_size] # 判断子 矩阵 是否为 局部 最大值 if np.all(window == np.max(window)): # 记录 局部 最大值 坐标 max_positions.append((i+window_size//2, j+window_size//2)) return max_positions 调用该函数,可以得到二维 矩阵 局部 最大值 坐标 列表。