在 OpenCV/Python 中将 bin 保持在直方图的 5% 到 95% 之间

Keep bins between 5% and 95% of a histogram in OpenCV/Python

我打算在任何灰度图像分布的极值点跳过图像的一些直方图。 左侧的极值点由位于 5% 区域内的所有直方图表示,右侧由位于整个分布的 95% 以上区域中的所有直方图表示 这是我结束的一些代码

image = cv2.imread('right.'+str(i)+'.png')
#print(image)
hist = cv2.calcHist([image], [0], None, [256], [0,256])
lower = round(0.05*len(hist))
upper = round(0.95*len(hist))
lower_hist_list = hist[0:lower]
upper_hist_list = hist[upper:len(hist)]
lower_hist, upper_hist
remaining_region =hist[index_above_lower : index_before_upper]

我想要的是下边界和上边界之间的直方图5%<=IMAGE<=95%?

根据我对你问题的理解;您希望避免直方图末端的像素强度。必须裁剪分布中低于 5% 和高于 95% 的像素。

首先,获取具有 256 个 bin 的灰度图像的直方图:

hist = cv2.calcHist([img],[0],None,[256],[0,256])

hist 存储值在 [0 - 255] 之间的像素数。

  • 256 的 5% ~ 12
  • 95% 的 256 ~ 243

根据您的标准,我们需要将像素值保持在 [12 - 243] 范围内。为此,我们可以使用 np.clip()

img2 = np.clip(img, 12, 243)
plt.hist(img2.ravel(),256,[0,256])

看上图:

  • 小于 12 的像素值已分配值 12
  • 高于 243 的像素值已分配值 243

因此您可以在图中看到这两个值的峰值。