首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取二维数组中高于某一值的局部最大值的坐标

获取二维数组中高于某一值的局部最大值的坐标
EN

Stack Overflow用户
提问于 2012-02-02 19:41:05
回答 2查看 40.1K关注 0票数 30
代码语言:javascript
运行
复制
from PIL import Image
import numpy as np
from scipy.ndimage.filters import maximum_filter
import pylab

# the picture (256 * 256 pixels) contains bright spots of which I wanna get positions
# problem: data has high background around value 900 - 1000

im = Image.open('slice0000.png')
data = np.array(im)

# as far as I understand, data == maximum_filter gives True-value for pixels
# being the brightest in their neighborhood (here 10 * 10 pixels)

maxima = (data == maximum_filter(data,10))
# How can I get only maxima, outstanding the background a certain value, let's say 500 ?

恐怕我不是很了解scipy.ndimage.filters.maximum_filter()函数。有没有一种方法可以只在斑点内而不在背景内获得像素坐标?

http://i.stack.imgur.com/RImHW.png (16位灰度图片,256*256像素)

EN

回答 2

Stack Overflow用户

发布于 2014-03-25 18:22:50

代码语言:javascript
运行
复制
import numpy as np
import scipy
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)
xy = np.array(ndimage.center_of_mass(data, labeled, range(1, num_objects+1)))

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

plt.autoscale(False)
plt.plot(xy[:, 1], xy[:, 0], 'ro')
plt.savefig('/tmp/result.png', bbox_inches = 'tight')

前面的条目对我非常有用,但是for循环减慢了我的应用程序。我发现ndimage.center_of_mass()在获取坐标方面做得又快又好……因此,提出了这个建议。

票数 13
EN

Stack Overflow用户

发布于 2017-11-02 00:37:39

现在可以使用skimage来完成此操作。

代码语言:javascript
运行
复制
from skimage.feature import peak_local_max
xy = peak_local_max(data, min_distance=2,threshold_abs=1500)

在我的电脑上,对于VGA图像大小,它的运行速度比上面的解决方案快了大约4倍,而且在某些情况下也返回了更准确的位置。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9111711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档