试试这个:
cv::bilateralFilter(img,9,75,75);
您可能会找到更多信息 这里
你可以尝试一下 的 核心 强> 和 的 filter2D 强> 功能,例如在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)
在图像处理中,内核,卷积矩阵或掩码是一个小矩阵。它用于模糊,锐化,压花,边缘检测等。这是通过在内核和图像之间进行卷积来实现的。
为了清楚本主题,我们应该做几点:
锐化图像是一个不适定的问题。换句话说,模糊是一种有损操作,并且从它返回通常是不可能的。
要锐化单个图像,您需要以某种方式添加约束(假设)您想要的图像类型以及它如何变得模糊。这是自然图像统计的领域。进行锐化的方法在其算法中明确地或隐含地保存这些统计数据(深度学习是最隐式编码的)。增加某些级别的常用方法 DOG或拉普拉斯金字塔分解 ,这是Brian Burns答案的推广,假设高斯模糊破坏了图像,加权如何完成与假设图像中的内容开始相关。
其他信息来源可以使问题更加清晰。常见的这种信息源是移动物体的视频或多视图设置。通常称为锐化该设置 超分辨率 (这是一个非常糟糕的名字,但它已经停留在学术界)。有过 OpenCV中的超分辨率方法 很长一段时间......尽管他们通常不能很好地解决真正的问题,但最后还是检查了一下。我希望深度学习也能在这里产生一些很好的结果。也许有人会发表有关那些有价值的评论。
你可以找到一个示例代码 的 使用“非锐化掩模”算法锐化图像 强> 在 OpenCV文档
改变的价值观 sigma , threshold , amount 会给出不同的结果
sigma
threshold
amount
// 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);
任何图像都是各种频率信号的集合。该 较高的频率控制边缘和较低的频率控制 图像内容。当有急剧过渡时形成边缘 从一个像素值到另一个像素值,如0和255 in 相邻细胞。显然,有一个急剧的变化,因此边缘 和高频率。为了锐化图像,可以进行这些过渡 进一步增强。
一种方法是将自制的滤镜内核与图像卷积。
import cv2 import numpy as np image = cv2.imread('images/input.jpg') kernel = np.array([[-1,-1,-1], [-1, 9,-1], [-1,-1,-1]]) sharpened = cv2.filter2D(image, -1, kernel) # applying the sharpening kernel to the input image & displaying it. cv2.imshow('Image Sharpening', sharpened) cv2.waitKey(0) cv2.destroyAllWindows()
还有另一种从明亮版本中减去图像模糊版本的方法。这有助于锐化图像。但是应该谨慎行事,因为我们只是增加像素值。想象一下灰度像素值190,如果乘以2的权重则生成380,但由于最大允许像素范围而被修剪为255。这是信息丢失并导致图像褪色。
addWeighted(frame, 1.5, image, -0.5, 0, image);