锐化空间滤波器
2016-03-26 16:18
260 查看
锐化处理主要目的是突出灰度过度部分。
结果:
标定的拉普拉斯滤波图像:
拉普拉斯滤波处理后图像中既有正值又有负值,所有负值被修剪为0,很多经过拉普拉斯滤波后的图像大部分是黑色的。典型的标定拉普拉斯图像的方法是对他的最小值加一个新的代替0的最小值。
1)模糊原图像。
2)从原图中减去模糊的图像得到模板。
3)将模板加到原图像上。
公式描述:
代码:
图像函数f(x,y)在点(x,y)的梯度是一个具有大小和方向的矢量,设为Gx 和 Gy 分别表示x方向和y方向的梯度,这个梯度的矢量可以表示为:
这个矢量的幅度为:
近似为:
罗伯特交叉梯度算子
算子:
由两个2*2模板组成,用卷积模板表示为:
结合
可得结果:
Soble算子
算子:
用上述方法可得:
其中z表示矩阵中该位置的值。
opencv接口:
代码
结果:
二阶微分-拉普拉斯算子锐化
两变量的离散拉普拉斯算子是:void laplaceSharpenl(){ auto im = imread("/Users/qixiangzhang/Desktop/openCV/jy.png"); Mat dst; Mat kernel = (Mat_<float>(3,3) << 0,-1,0,-1,5,-1,0,-1,0); filter2D(im, dst, im.depth(), kernel); imshow("Original", im); imshow("Sharpenl", dst); }
结果:
标定的拉普拉斯滤波图像:
拉普拉斯滤波处理后图像中既有正值又有负值,所有负值被修剪为0,很多经过拉普拉斯滤波后的图像大部分是黑色的。典型的标定拉普拉斯图像的方法是对他的最小值加一个新的代替0的最小值。
非锐化掩蔽和高提升滤波
非锐化掩蔽的处理步骤:1)模糊原图像。
2)从原图中减去模糊的图像得到模板。
3)将模板加到原图像上。
公式描述:
代码:
void Unsharp(){ auto im = imread("/Users/qixiangzhang/Desktop/openCV/yq.png"); Mat dstIm_9; blur(im, dstIm_9, Size(9,9));//模糊 imshow("Original",im); imshow("blur9", dstIm_9); Mat sub; absdiff(im,dstIm_9,sub);//相减 Mat add; scaleAdd(im, 1, sub, add);//相加,非锐化掩蔽 imshow("k=1",add); scaleAdd(im, 2, sub, add);//k=2,高提升滤波 imshow("k=2",add); }
梯度图像
梯度图像可理解为突出图像显著变化的地方,变化越大其梯度值越高。图像函数f(x,y)在点(x,y)的梯度是一个具有大小和方向的矢量,设为Gx 和 Gy 分别表示x方向和y方向的梯度,这个梯度的矢量可以表示为:
这个矢量的幅度为:
近似为:
罗伯特交叉梯度算子
算子:
由两个2*2模板组成,用卷积模板表示为:
结合
可得结果:
Soble算子
算子:
用上述方法可得:
其中z表示矩阵中该位置的值。
opencv接口:
CV_EXPORTS_W void Sobel( InputArray src, OutputArray dst, int ddepth, int dx, int dy, int ksize=3, double scale=1, double delta=0, int borderType=BORDER_DEFAULT );
代码
void sobleIM(){ auto src = imread("/Users/qixiangzhang/Desktop/openCV/yq.png"); imshow("1",src); //用高斯滤波进行模糊 GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT ); Mat grad_x,grad_y; Mat abs_grad_x,abs_grad_y; //计算x梯度 Sobel(src, grad_x, CV_8U, 1, 0); convertScaleAbs( grad_x, abs_grad_x ); //计算y梯度 Sobel(src, grad_y, CV_8U, 1, 0); convertScaleAbs( grad_y, abs_grad_y ); //相加并加权。 addWeighted( abs_grad_x, 1, abs_grad_y, 1, 0, src ); imshow("soble1",src); addWeighted( abs_grad_x, 2, abs_grad_y, 2, 0, src ); imshow("soble2",src); }
结果:
相关文章推荐
- JAVA 线程同步
- Android 如何避免Handler引起内存泄露
- 20135201李辰希 《Linux内核分析》第五周 扒开系统调用的“三层皮”(下)
- 4-3 yum命令
- eclipse更换字体
- 高斯消元求解多元一次方程组
- Win7/Win8.1系统使用注册表关闭升级Win10推送的两种方法图文教程
- 《MySQL必知必会学习笔记》:正则表达式
- lua 中pairs 和 ipairs区别
- golang sync WaitGroup
- 装载: Matlab 提取矩阵 某一行 或者 某一列 的方法
- 通过MyEclipse生成Hibernate类文件和hbm.xml文件,或者annotation文件
- OTSU算法对图像二值化
- restController与Controller-待续
- Caffe Python MemoryDataLayer Segmentation Fault
- 测试
- Java 动态代理机制
- CSS3中的3D旋转 rotate、3D位移 translate
- bzoj2064: 分裂
- 66.enumerateObjects遍历方法详解