【发布时间】:2015-05-17 09:45:19
【问题描述】:
目标: 输入一个图像(2d numpy 数组)和一个窗口大小,并输出相同的数组,保留局部最大值,但在其他地方为 0。
我正在努力解决的问题:我认为我在代码中犯了一个愚蠢的错误,可能在我的循环中有一些拼写错误,但我不确定(局部最大值仅在左侧图像,这是不正确的)。正如我在下面提到的,我也欢迎任何使用 OpenCV 或 numpy 的简单技巧来缩短这个解决方案。
类似问题:Finding Local Maxima in an Image
和Find local maxima in grayscale image using OpenCV
我的不同,因为:我希望压制除局部最大值之外的所有值。我不必在下面使用我的代码,我无法找到 opencv 或 numpy 的内置函数来做我需要做的事情(cv 中的哈里斯角将隐含地将此作为步骤之一,但我需要一些东西来执行我需要的唯一操作)。我读了一些关于扩张的文章,但不确定这在这里是否也有用。
到目前为止我已经尝试过。
def nonMaximalSupress(image,NHoodSize):
#For
for x in range(0,image.shape[0]-1):
if x+NHoodSize[0]<image.shape[0]:
#while we can still take a square
#print "AHH ", image.shape
startWindow=0
for y in range(startWindow,image.shape[1]-NHoodSize[1]):
#try:
if np.sum(image[x:x+NHoodSize[0]][y:y+NHoodSize[1]])==0:
localMax=0
else:
localMax = np.amax(image[x:x+NHoodSize[0]][y:y+NHoodSize[1]])
#except ValueError:
#localMax=0
#print "local max is ", localMax
maxCoord=np.unravel_index(np.argmax((image[x:x+NHoodSize[0],y:y+NHoodSize[1]])),
image.shape)+np.array((x,y))
#print "X is %r, Y is %r, max coord is %r \n y+nhood is %r" %(x,y,maxCoord,y+NHoodSize[1])
#suppress everything
image[x:x+NHoodSize[0]][y:y+NHoodSize[1]]=0
#reset only the max
#print maxCoord
if localMax > 0:
print localMax
print "max coord is ", maxCoord[0], maxCoord[1]
image[maxCoord[0]][maxCoord[1]]=localMax
#increment y
x+=NHoodSize[0]
return image
【问题讨论】:
-
是找到局部最大值的问题,还是将其他值设置为 0 的问题?
-
在小型数组上测试类似
image[x:x+NHoodSize[0]][y:y+NHoodSize[1]]=0的语句。
标签: python opencv numpy computer-vision