gpt4 book ai didi

python - 获取二维数组中局部最大值的坐标高于某个值

转载 作者:IT老高 更新时间:2023-10-28 20:23:48 26 4
gpt4 key购买 nike

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() 函数。有没有办法只在 Blob 内而不在背景内获得像素坐标?

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

最佳答案

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)
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:

enter image description here

上面的程序产生 result.pngthreshold = 1500。降低 threshold 以获取更多局部最大值:

enter image description here

引用文献:

关于python - 获取二维数组中局部最大值的坐标高于某个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9111711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com