当前位置:   article > 正文

【计算机视觉1】图像锐化算法

图像锐化算法

锐化算法

在实际的图像处理中,锐化算法是图像增强中一种普遍的算法,它可以让图像显示效果更加清晰、鲜明。锐化算法的基本思想是对图像进行高通滤波来增强图像的高频部分,然后将增强后的高频部分加回到原图像中,从而得到锐化后的图像。

拉普拉斯公式

其中一个常用的锐化算法是“拉普拉斯公式”。

  • f(x,y) = g(x,y) - k * (g(x+1,y) + g(x-1,y) + g(x,y+1) + g(x,y-1))

其中,f(x,y)为锐化后的像素值,g(x,y)为原始像素值,k为一个常数,通常取值范围为0.2~0.8,以实现不同程度的锐化效果。对于边缘处的像素,需要进行特殊处理。

Python实现

# 定义锐化算子
kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]])

# 使用滤波器进行卷积操作
dst = cv2.filter2D(img, -1, kernel)
  • 1
  • 2
  • 3
  • 4
  • 5

cv2.filter2D函数进行锐化操作,其中第一个参数为原始图像,第二个参数为输出图像的深度,通常设置为-1表示与原始图像相同。第三个参数为卷积核,这里使用的是拉普拉斯算子。

C++实现

Mat sharpening(Mat inputImage)
{
    // 定义拉普拉斯算子模板
    Mat laplacianKernel = (Mat_<float>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
    Mat outputImage;
    // 使用滤波函数对输入图像进行锐化处理
    filter2D(inputImage, outputImage, inputImage.depth(), laplacianKernel);
    return outputImage;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在函数中,我们先定义了拉普拉斯算子模板,然后对输入图像进行滤波操作,最终返回锐化后的图像。

高斯公式

锐化算法中使用的高斯模糊滤波器可以由以下公式表示:

  • G(x,y) = 1/(2πσ²)e^(-(x²+y²)/(2σ²))

其中,x、y为像素位置,σ为高斯核的标准差。

在锐化算法中,我们需要将原始图像减去模糊图像,得到图像的高频成分,即边缘信息,可以使用以下公式:

  • I’(x,y) = I(x,y) - k * G(x,y) * I(x,y)

其中,I(x,y)为原始图像,G(x,y)为高斯模糊滤波器,k为增强系数。

Python实现

# 定义锐化系数
alpha = 1.5

# 定义高斯核大小和标准差
kernel_size = 5
sigma = 1.5

# 构建高斯核
kernel = cv2.getGaussianKernel(kernel_size, sigma)

# 对高斯核进行归一化
kernel = (kernel / np.sum(kernel))[:, np.newaxis]

# 读取原始图像
img = cv2.imread('input.jpg')

# 对图像进行高斯滤波
blur = cv2.filter2D(img, -1, kernel)

# 计算锐化后的图像
sharp = cv2.addWeighted(img, alpha, blur, -alpha, 0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

cv2.getGaussianKernel函数用于构建高斯核,cv2.filter2D函数用于对图像进行高斯滤波,cv2.addWeighted函数用于计算锐化后的图像,其之间的区别就在于卷积核不同。

C++实现

void sharpenImage(Mat& input, Mat& output, float sigma, float amount)
 {
    // 创建高斯核
    int kernelSize = 2 * int(4 * sigma + 0.5) + 1;
    Mat kernel = getGaussianKernel(kernelSize, sigma, CV_32F);
    // 创建拉普拉斯核
    Mat laplacianKernel = (Mat_<float>(3, 3) << 0, -1, 0, -1, 4, -1, 0, -1, 0);
    // 对高斯核进行归一化
    kernel /= sum(kernel)[0];
    // 进行卷积,得到中间图像
    Mat middle;
    filter2D(input, middle, -1, kernel);
    // 对中间图像进行锐化处理
    Mat laplacian;
    filter2D(middle, laplacian, -1, laplacianKernel);
    output = input + amount * laplacian;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

其中,input为原始图像,sigma为高斯核标准差,amount为锐化强度,output为锐化后的图像。该函数首先创建一个高斯核,然后创建一个拉普拉斯核,对高斯核进行归一化并进行卷积得到中间图像,最后对中间图像进行锐化处理得到最终的锐化图像。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/248796
推荐阅读
相关标签
  

闽ICP备14008679号