python - 图像去模糊

标签 python opencv rgb scikit-image grayscale

这篇文章分为两个

第一部分

我有一个小问题将图像从灰度转换回 RGB。

有问题的图片:

enter image description here

我使用这段代码来转换它:

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')

这是输出:

enter image description here

非常感谢对这两个问题的任何帮助!

最佳答案

要均衡彩色图像,似乎很常见的做法是

  • 将图像转换为 HSV 或 YUV
  • 将图像拆分为单独的组件(例如 H、S、V)
  • 均衡值(value) channel (或所有三个,如果你想)
  • 将 channel 重新合并在一起
    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/

    相关文章:

    python - 如何在 C++ 中操作 pybind11::dict

    python - 选择列中每行的前 N ​​个元素

    python - 链接方法时 Jupyter Notebook 中的自动完成

    python - Tensorflow 可以用于多元函数的全局最小化吗?

    c - 如何将 24 位 RGB 转换为 8 位 RGB

    javascript - RGB 空间淡入淡出

    Android OpenCV 查找最大的正方形或矩形

    opencv - 如何使用 opencv.js 中的 cv.goodFeaturesToTrack?

    android - 使用 OpenCV 检测台球

    c++ - 将 Yuv420 转换为 rgb 并在 qt 像素图上显示