【发布时间】:2021-10-30 19:30:37
【问题描述】:
【问题讨论】:
-
在过去的一个月里,我们已经多次遇到过这个问题。你们都在同一个班吗?
标签: python opencv image-processing
【问题讨论】:
标签: python opencv image-processing
您可以尝试应用保边高斯过滤而不是直方图。
例如,你可以尝试双边过滤器或引导过滤器
有 OpenCV 实现,但我从未尝试过。
以下 MATLAB 代码演示了过滤器:
I = rgb2gray(im2double(imread('I.jpg')));
G = imguidedfilter(I, 'DegreeOfSmoothing', 0.005);
J = imsharpen(G, 'Amount', 2);
figure;imshow(J)
B = imbilatfilt(I);
K = imsharpen(B, 'Amount', 2);
figure;imshow(K)
如果这似乎不起作用,
尝试这种方法,使用直方图:
from matplotlib import pyplot as plt
import cv2
# Load in image as grayscale
image = cv2.imread('1.jpg', 0)
plt.hist(image.ravel(), 256, [0,256])
像素聚集在中等强度附近。为了增加图像的对比度,直方图均衡化在整个范围内拉伸强度值以获得更宽和更均匀的分布。你可以使用内置函数cv2.equalizeHist()
equalize = cv2.equalizeHist(image)
plt.hist(equalize.ravel(), 256, [0,256])
强度范围现在均匀分布。直方图均衡考虑了图像的全局对比度,当图像的直方图被限制在特定区域时效果很好。这是结果
在某些情况下,如果大区域存在强度变化,CLAHE(对比度受限自适应直方图均衡)可能会更好。 CLAHE 在 OpenCV 中实现为 cv2.createCLAHE()
clahe = cv2.createCLAHE().apply(image)
plt.hist(clahe.ravel(), 256, [0,256])
【讨论】: