首页 文章

如何在OpenCV中锐化图像?

提问于
浏览
95

如何使用 OpenCV 锐化图像?有许多平滑或模糊的方法,但没有我能看到的锐化 .

5 回答

  • 23

    一个通用程序在_1297583中列出:您使用高斯平滑滤波器并从原始图像中减去平滑后的版本(以加权方式,以便恒定区域的值保持不变) .

    frame 的锐化版本转换为 image :(均为 cv::Mat

    cv::GaussianBlur(frame, image, cv::Size(0, 0), 3);
    cv::addWeighted(frame, 1.5, image, -0.5, 0, image);
    

    您需要为自己调整参数 .

    还有laplacian锐化,你应该在谷歌上找到一些东西 .

  • -4

    您可以尝试一个简单的 kernelfilter2D 函数,例如在Python中:

    kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
    im = cv2.filter2D(im, -1, kernel)
    

    维基百科对内核有一个很好的概述,这里有更多的例子 - https://en.wikipedia.org/wiki/Kernel_(image_processing)

    在图像处理中,内核,卷积矩阵或掩码是一个小矩阵 . 它用于模糊,锐化,压花,边缘检测等 . 这是通过在内核和图像之间进行卷积来实现的 .

  • 144

    你可以在OpenCV Documentation找到关于 sharpening image using "unsharp mask" algorithm 的示例代码

    更改 sigmathresholdamount 的值会产生不同的结果

    // sharpen image using "unsharp mask" algorithm
    Mat blurred; double sigma = 1, threshold = 5, amount = 1;
    GaussianBlur(img, blurred, Size(), sigma, sigma);
    Mat lowContrastMask = abs(img - blurred) < threshold;
    Mat sharpened = img*(1+amount) + blurred*(-amount);
    img.copyTo(sharpened, lowContrastMask);
    
  • 13

    为了清楚本主题,我们应该做几点:

    • 锐化图像是一个不适定的问题 . 换句话说,模糊是一种有损操作,并且从它返回通常是不可能的 .

    • 要锐化单个图像,您需要以某种方式添加约束(假设),指出您想要的图像类型以及它如何变得模糊 . 这是自然图像统计的领域 . 进行锐化的方法在其算法中明确地或隐含地保存这些统计数据(深度学习是最隐式编码的) . 增加某些级别的一般方法,即Brian Burns答案的概括,假设高斯模糊破坏了图像,加权的方式与图像中的内容的假设有关 . 首先 .

    • 其他信息来源可以使问题锐化得很好 . 常见的这种信息源是移动物体的视频或多视图设置 . 在该设置中锐化通常被称为super-resolution(这是一个非常糟糕的名称,但它已经停留在学术界) . 很长一段时间以来都有super-resolution methods in OpenCV尽管他们通常不能很好地解决真正的问题,但最后还是检查出来了 . 我希望深度学习也能在这里产生一些很好的结果 . 也许有人会发表有关那些有 Value 的评论 .

  • 1

    试试这个:

    cv::bilateralFilter(img,9,75,75);
    

    您可能会找到更多信息here

相关问题