【发布时间】:2021-12-13 18:18:48
【问题描述】:
我正在尝试对图像进行线性缩放,以便使用整个灰度范围。这是为了改善镜头的照明。但是,在绘制直方图时,我不知道如何获得缩放直方图,使其更平滑,因此它是一条渴望离散箱的曲线。任何提示或要点将不胜感激。
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread(r'/Users/harold/Documents/Academia/Nottingham Uni/Year 4/ImageProcessing/Imaging_Task_Sheet/PointImage.jpeg', cv.IMREAD_GRAYSCALE)
img_s = img/255
img_s = img_s / np.max(img_s)
img_s = img_s*255
histogram = cv.calcHist([img], [0], None, [256], [0, 256])
histogram1 = cv.calcHist([img_s.astype('uint8')], [0], None, [256], [0, 256])
plt.figure()
plt.title("Grayscale Histogram")
plt.xlabel("grayscale value")
plt.ylabel("pixels")
plt.plot(histogram, label='Original Image') # <- or here
plt.plot(histogram1, label='Equalised Image') # <- or here
产生的直方图是:
来自这张照片:
【问题讨论】:
-
我猜你想要一个漂亮的钟形曲线? (在这种情况下)
-
为什么需要找到直方图才能缩放图像。您可以使用 skimage.exposure.rescale_intensity(image, in_range='image', out_range=(0,255))。这将自动找到您的输入范围并缩放到范围 0,255 或您想要指定的任何值。
-
官方文档在histogram equalization上有一个不错的python教程