【图像锐化】非锐化掩模 USM(Unsharpen Mask)与锐化掩模 SM(Sharpen Mask)

简介: > 掩膜操作可以提高图像对比度,对比度提高可以增加图像感官度、锐化,让看起来有点模糊的图像更清晰。> 原理:提取图像的高频分量,再用一个参数放大之后与原图叠加,这样就产生了一个增强了边缘的图像。 > 提取图像的高频分量的做法有两种:> 1.直接使用高通滤波器,得到高频分量。2.通过低通滤波器,再用原图减去低频就得到了高频信息。

- 锐化掩模 SM 锐化增强算法-加法操作

效果图 = 源图像+w*高频分量图像;其中w表示权重(0.1~0.9),默认为0.6

矩阵的掩膜操作十分简单,根据掩膜来重新计算每个像素的像素值,掩膜(mask 也被称为Kernel)。直接提取高频的方法有sobel算法、laplcian算子,sobel算子是图像的一阶导数,提取的是梯度信息,分水平和垂直两种,常常用来做边缘检测、方向判别,sobel算子在斜坡处不为0,因此会产生较粗的边缘。laplcian算子是图像的二阶导,在图像开始变化和结束变化的地方值不为0,渐变时结果为0,因此laplacian比sobel算子更适合做sharpen。


- 非锐化掩模 USM 锐化增强算法-减法操作

效果图 = 源图像+(源图像– w*低频分量图像)/(1-w);其中w表示权重(0.1~0.9),默认为0.6

除了直接提取高频的方法外,我们也可以先提取低频,原图减去低频得到高频。这种方法称为非锐化掩(unsharpen mask),我们常使用低通滤波器(高斯、双边)对图像进行滤波,这种方法滤波器很好控制(包括大小和强弱),从而可以控制高频分量的强弱。

fe00f5839a9e55e64c38db187f668591.png

图像卷积处理实现锐化有一种常用的算法叫做Unsharpen Mask方法,这种锐化的方法就是对原图像先做一个高斯模糊,然后用原来的图像减去一个系数乘以高斯模糊之后的图像,然后再把值Scale到0~255的RGB像素值范围之内。基于USM锐化的方法可以去除一些细小的干扰细节和噪声,比一般直接使用卷积锐化算子得到的图像锐化结果更加真实可信。

Opencv+C++

voidquick_opencv::unsharpenMask_Demo(Mat&image)
{
// 非锐化掩模// USM锐化公式表示如下://(源图像– w*高斯模糊) / (1 - w);其中w表示权重(0.1~0.9),默认为0.6Matblur_img, usm;
GaussianBlur(image, blur_img, Size(0, 0), 25);
addWeighted(image, 1.5, blur_img, -0.5, 0, usm);
imshow("非锐化掩模", usm);
}
voidquick_opencv::sharpenMask_Demo(Mat&image)
{
//掩膜操作intchannels=image.channels();//图像的通道数intcols= (image.cols)*image.channels();//列数*通道数introws=image.rows;//行数Matdst=Mat::zeros(image.size(), image.type());//初始化 dstfor (introw=1; row<rows-1; row++) 
    {
constuchar*previous=image.ptr<uchar>(row-1);//上一行constuchar*current=image.ptr<uchar>(row);//当前行constuchar*next=image.ptr<uchar>(row+1);//下一行uchar*output=dst.ptr<uchar>(row);
for (intcol=1*channels; col<cols-1*channels; col++) {
//掩膜操作:I(i,j) = 5*I(i,j) - [I(i-1,j)+I(i+1,j)+I(i,j-1)+I(i,j+1)]output[col] =saturate_cast<uchar>(5*current[col] - (previous[col] +next[col] +current[col+channels] +current[col+channels]));
        }
    }
imshow("锐化掩模", dst);
}

效果图

83eb381e731c06e9eda8fa7ce50c7778.png

目录
相关文章
|
算法 数据可视化
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
2117 0
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
|
27天前
|
Serverless 计算机视觉
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
这篇文章介绍了如何使用OpenCV库通过mask图像绘制分割对象的外接椭圆。首先,需要加载mask图像,然后使用`cv2.findContours()`寻找轮廓,接着用`cv2.fitEllipse()`拟合外接椭圆,最后用`cv2.ellipse()`绘制椭圆。文章提供了详细的代码示例,展示了从读取图像到显示结果的完整过程。
42 0
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
|
5月前
|
Python
Pygame基础11-mask 蒙版
Pygame基础11-mask 蒙版
58 14
|
6月前
|
算法 计算机视觉 异构计算
yolo如何画框、如何变换目标检测框的颜色和粗细、如何运行detect脚本
yolo如何画框、如何变换目标检测框的颜色和粗细、如何运行detect脚本
ENVI Classic:如何进行图像融合(HSV变换/Brovey变换/PC变换)?
ENVI Classic:如何进行图像融合(HSV变换/Brovey变换/PC变换)?
1565 0
|
6月前
|
编解码 计算机视觉
YOLOv8改进 | Conv篇 | 2024.1月最新成果可变形卷积DCNv4(适用检测、Seg、分类、Pose、OBB)
YOLOv8改进 | Conv篇 | 2024.1月最新成果可变形卷积DCNv4(适用检测、Seg、分类、Pose、OBB)
932 0
|
机器学习/深度学习 编解码 算法
即插即用 | DCT-Mask用离散余弦变换Mask提升实例分割性能(文末获取论文)
即插即用 | DCT-Mask用离散余弦变换Mask提升实例分割性能(文末获取论文)
567 0
|
机器学习/深度学习 编解码 算法
图像目标分割_6 Mask RCNN
目标检测和语义分割的效果在短时间内得到了很大的改善。在很大程度上,这些进步是由强大的基线系统驱动的,例如,分别用于目标检测和语义分割的Fast/Faster R-CNN和全卷积网络(FCN)框架。这些方法在概念上是直观的,提供灵活性和鲁棒性,以及快速的训练和推理。论文作者在这项工作中的目标是为目标分割开发一个相对有力的框架。
203 0
|
编解码 计算机视觉
CV13 图像分辨率操作(图像金字塔与resize()函数)
其中,高斯核卷积运算就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值(券种不同)经过加权平均后得到。常见的 33与 55 高斯核(CV9 2D卷积与图像滤波)
200 0
|
机器学习/深度学习 传感器 编解码
CV学习笔记-立体视觉(点云模型、Spin image、三维重建)
CV学习笔记-立体视觉(点云模型、Spin image、三维重建)
921 0
CV学习笔记-立体视觉(点云模型、Spin image、三维重建)