opencv c++ 图像梯度、边缘、锐化
创始人
2024-03-05 13:05:14
0

图像梯度的目的:

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

即:

对满足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);}

相关内容

热门资讯

那段孤单的日子作文600字 那段孤单的日子作文600字  是谁!我将目光锁向厨房的门后,全身毛骨悚然,腿脚瘫痪般的轻声走向厨房。...
电影《训龙高手》500字作文 电影《训龙高手》500字作文  马上就要到“六一儿童节”了,妈妈问我想要什么?我说:“我想看电影《训...
三八妇女节给妈妈的祝福语 三八妇女节给妈妈的祝福语  用一缕春风,二滴夏雨,三片秋叶,四朵冬梅,织成五颜六色的礼盒,结着七彩八...
春节作文400字 春节作文400字4篇  在现实生活或工作学习中,大家对作文都再熟悉不过了吧,作文是通过文字来表达一个...
寒假游记海南行作文 寒假游记海南行作文  无论是身处学校还是步入社会,大家都经常接触到作文吧,作文是人们以书面形式表情达...
湖南卫视小年夜春晚播出时间及... 湖南卫视2015小年夜春晚播出时间及节目单  主持人:何炅、汪涵、谢娜、梁田  播出时间:2015年...
生活告诉我作文 生活告诉我作文3篇  在平平淡淡的日常中,大家对作文都不陌生吧,借助作文可以宣泄心中的情感,调节自己...
人生路上坎坷多作文 人生路上坎坷多作文(精选28篇)  无论在学习、工作或是生活中,大家都接触过作文吧,借助作文可以宣泄...
梦的翅膀作文 梦的翅膀作文梦的翅膀成功就是让人梦想成真的终点,在通往成功的路上,我们品尝着生活的酸甜苦辣。每当我听...
描写动物的作文 描写动物的作文范文4篇  小兔子太可爱了!小朋友,你们有没有养过这样的小兔子?没有就赶快去养一只吧!...
中秋节赏月的作文400字 中秋节赏月的作文400字汇总7篇  在平平淡淡的学习、工作、生活中,大家都有写作文的经历,对作文很是...
猴年短信祝福语 猴年短信祝福语精选  1、新年佳节到,向你问个好,身体倍健康,心情特别好;好运天天交,口味顿顿妙。最...
各民族的风俗习惯 各民族的风俗习惯各民族的风俗习惯1.藏族藏族主要分布在西-藏,其余在青海、甘肃、四川、云南等地。藏族...
快乐的春节作文300字 【必备】快乐的春节作文300字6篇  在日常学习、工作和生活中,大家都跟作文打过交道吧,通过作文可以...
元宵节花灯字谜 2017年元宵节花灯字谜大全  以下是小编给大家整理的元宵节花灯字谜的内容,欢迎大家查看。  百无一...
行善作文 行善作文600字(通用14篇)  在平平淡淡的日常中,大家都不可避免地要接触到作文吧,借助作文可以宣...
教师节英文祝福语 教师节英文祝福语大全  在日常的学习、工作、生活中,大家都有写祝福语的经历,对祝福语很是熟悉吧,祝福...
过春节的作文900字 关于过春节的作文900字4篇  无论在学习、工作或是生活中,大家对作文都再熟悉不过了吧,通过作文可以...
家乡的春节作文 家乡的春节作文(通用40篇)  在我们平凡的日常里,大家都经常看到作文的身影吧,写作文是培养人们的观...
有意义的暑假生活作文400字 有意义的暑假生活作文400字 虽然美好的暑假生活过去了,那些零零星星的生活碎片我还记忆犹新,特别是那...