这篇文章分为两个
第一部分
我有一个小问题将图像从灰度转换回 RGB。
有问题的图片:
我使用这段代码来转换它:
equ = cv2.cvtColor(equ, cv2.COLOR_GRAY2RGB)
虽然没有任何成功......
第二部分
此外,我需要对此类图像进行去模糊处理。 Here我发现了一些使用维纳过滤器的代码,但是当我实现它时,它似乎不能有效地工作。这是代码:
psf = np.ones((5, 5)) / 25
img = convolve2d(equ, psf, 'same')
img += 0.1 * img.std() * np.random.standard_normal(img.shape)
#deconvolved_img = restoration.wiener(img, psf, 1100)
deconvolved = restoration.wiener(img, psf, 1, clip=False)
plt.imshow(deconvolved, cmap='gray')
这是输出:
非常感谢对这两个问题的任何帮助!
最佳答案
要均衡彩色图像,似乎很常见的做法是
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
split = cv2.split(hsv) # split is a 3D array containing H S V info
split[2] = cv2.equalizeHist(split[2])
hsv = cv2.merge(split)
img = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
对于“去模糊”,我有时会使用不清晰的蒙版。来自 Wikipedia page on unsharp masking ,这个操作的公式是
sharpened = original + (original − blurred) × amount
可以重新排列为
sharpened = original×(1 + amount) + blurred×(-amount)
维基百科说
amount
是一个很好的起点为 0.5 至 1.5。在我的应用程序中,我有一个旋转框,让它在 0 和 10 之间变化。对于模糊,我使用内核大小从 1 到 31(必须是奇数和整数)的高斯模糊。要进行矩阵数学运算,我更喜欢使用 OpenCV 函数,因为它们通常比 NumPy 更快,并且它们通常会将输出自动缩放到 0 到 255 之间的值(例如,对于 8 位和 8 位/3 channel 图像)。这里我们使用addWeighted哪个dst = src1*alpha + src2*beta + gamma;
amount = 1.5
ksize = 3
blur = cv2.GaussianBlur(img, ksize, 0, 0)
unsharp = cv.addWeighted(img, 1 + amount, blur, -amount, 0)
关于python - 图像去模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51309603/