在 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
因此您可以在图中看到这两个值的峰值。
我打算在任何灰度图像分布的极值点跳过图像的一些直方图。 左侧的极值点由位于 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
因此您可以在图中看到这两个值的峰值。