此帖子分为两部分
第一部分
我在将图像从灰度转换回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')
这是输出:
非常感谢您对这两个问题的帮助!
答案 0 :(得分:2)
要使彩色图像均匀化,看来要做的一件事是
将频道合并在一起
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中,此操作的公式为
锐化=原始+(原始-模糊)×数量
可以重新排列为
锐化=原始×(1 +数量)+模糊×(-数量)
维基百科说amount
的一个好的起点是0.5到1.5。在我的应用程序中,我有一个Spinbox,让它在0到10之间变化。对于模糊,我使用内核大小在1到31(必须为奇数和整数)之间的高斯模糊。为了进行矩阵数学运算,我更喜欢使用OpenCV函数,因为它们通常比NumPy更快,并且通常会将它们自动缩放到0到255之间的值(例如8位和8位/ 3通道图像)。这里我们使用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)