opencv c++ 图像梯度、边缘、锐化
创始人
2024-03-05 07:24:35

图像梯度的目的:

获取图像上沿着某一方向或多个方向上,像素值的突变图像。

即:

对满足x_{1},x_{2},...,x_{n}之间相互独立的函数,f\left ( x_{1},...,x_{n} \right )

f'(x_{1})+...+f'(x_{n})

1、预备知识

1.1、常见的梯度计算算子

 1.2、梯度计算方法

L2法:

 L1法:

 1.3如何获取梯度图像

分别使用x、y方向的算子来获取Gx,Gy,然后选用梯度计算方法来获取对应像素点的梯度值。

2、代码示例

2.1robot算子

void self_conv(Mat& image)
{//robot 梯度计算Mat robot_x = (Mat_(2, 2) << 1, 0, 0, -1);//自定义Mat核Mat robot_y = (Mat_(2, 2) << 0, 1, -1, 0);Mat grad_x,grad_y;filter2D(image, grad_x, CV_32F, robot_x, Point(-1, -1), 0, BORDER_DEFAULT);filter2D(image, grad_y, CV_32F, robot_y, Point(-1, -1), 0, BORDER_DEFAULT);convertScaleAbs(grad_x, grad_x);//该API将图像格式转为CV_8U格式,并将所有像素值置为正。convertScaleAbs(grad_y, grad_y);Mat result;add(grad_x, grad_y, result);namedWindow("robot img", WINDOW_FREERATIO);imshow("robot img", result);
}

2.2sobel算子

注:也可仿照robot算子示例输入3×3的卷积核,并赋予对应的sobel值进行梯度图像获取 。

opencvAPI调用示例:

void self_conv(Mat& image)
{Mat grad_x,grad_y;Sobel(image, grad_x, CV_32F, 1, 0);Sobel(image, grad_y, CV_32F, 0, 1);convertScaleAbs(grad_x, grad_x);//该API将图像格式转为CV_8U格式,并将所有像素值置为正。convertScaleAbs(grad_y, grad_y);Mat result2;//add(grad_x, grad_y, result2);addWeighted(grad_x, 0.5, grad_y, 0.5, 0, result2);namedWindow("sobel img", WINDOW_FREERATIO);imshow("sobel img", result2);
}

2.3Scharr算子

void self_conv(Mat& image)
{Mat grad_x,grad_y;Scharr(image, grad_x, CV_32F, 1, 0);Scharr(image, grad_y, CV_32F, 0, 1);convertScaleAbs(grad_x, grad_x);//该API将图像格式转为CV_8U格式,并将所有像素值置为正。convertScaleAbs(grad_y, grad_y);Mat result3;//add(grad_x, grad_y, result2);addWeighted(grad_x, 0.5, grad_y, 0.5, 0, result3);namedWindow("Scharr img", WINDOW_FREERATIO);imshow("Scharr img", result3);
}

结果:

3、拉普拉斯算子进行边缘获取、锐化

即二阶导数的图像应用。

3.1、拉普拉斯算子与锐化算子

拉普拉斯算子:

分别为: 四邻域算子、八邻域算子、变种算子。

拉普拉斯算子缺点:当图像细节较多时,难以去除这些细节的影响,需要与图像阈值化进行搭配使用。

锐化算子:原图加上拉普拉斯算子的结果,本质为图像增强。

 3.2、代码示例

拉普拉斯:

void Laplacian_demo(Mat& image)
{Mat dst;Laplacian(image, dst, -1, 3, 1.0, 0, BORDER_DEFAULT);namedWindow("Laplacian", WINDOW_FREERATIO);imshow("Laplacian", dst);
}

 锐化:

由于没有现有的API,下列代码由filter2D加上自定义Mat方法实现。

void QuickDemo::image_descent(Mat& image)
{//定义锐化算子Mat sharp = (Mat_(3, 3) << 0, -1, 0,-1, 5, -1,0, -1, 0);Mat result;filter2D(image, result, -1, sharp, Point(-1, -1), 0, BORDER_DEFAULT);convertScaleAbs(result, result);namedWindow("sharp img", WINDOW_FREERATIO);imshow("sharp img", result);
}

4、USM(unsharp mask)锐化

权重化减法锐化公式:

 sharp_img = α×blur - β×laplacian

优点:忽视细小细节着重对有用部分边缘进行锐化。

void usm_sharp(Mat& image)
{Mat blur_img, lap_img;GaussianBlur(image, blur_img, Size(3, 3), 0, 0, BORDER_DEFAULT);Laplacian(image, lap_img, -1, 1, 1.0, 0, BORDER_DEFAULT);Mat usm_img;addWeighted(blur_img, 1, lap_img, -0.7, 0, usm_img, -1);namedWindow("usm_sharp img", WINDOW_FREERATIO);imshow("usm_sharp img", usm_img);}

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...