sobel图像预处理

实现 <<一种微小表面缺陷的机器视觉检测方法>>一文中的预处理

在微小表面缺陷检测中,由于缺陷面积很小,缺陷区域的灰度值变化往往更剧烈. 梯度向量的模值能反映该剧烈变化,且计算量不大. 梯度处理不但能突出图像中的小缺陷,而且能使变化缓慢的背景的特征减弱,大大简化了自动检测的计算任务[8]. 因此,对于背景变化不剧烈的表面图像,可以采用梯度法对表面图像进行增强. 当表面缺陷面积较小时,缺陷形状往往与圆形有一定的相似度,例如孔形、点状、斑状缺陷等,于是用Sobel 算子[8]对图像中3×3大小的邻域计算邻域中心位置像素的梯度幅值,并将该幅值记为g. 设图像的灰度级分为1, 2, · · · , L,如果g>l则灰度值取l,小于l则取g

#include <opencv2/core/core.hpp>
#include "opencv2/imgproc/imgproc.hpp"  
#include "opencv2/highgui/highgui.hpp"  
#include <iostream>  
using namespace cv;  
using namespace std; 

int main(){
Mat img,img2,img3;//请读入灰度图像
img=imread("D:\\ping\\lf1.bmp",0);
Mat kernel=(Mat_<uchar>(3,3)<<-1,-2,-1,0,0,0,1,2,1);
copyMakeBorder(img,img2,1,1,1,1,BORDER_CONSTANT,Scalar(0) );//边界扩展
img2.copyTo(img3);
int nc=img2.cols;
int nr=img2.rows;
int level=250;
for(int j=1;j<=nr-2;j++){
	uchar *p=img2.ptr<uchar>(j);
	uchar *p1=img3.ptr<uchar>(j);
	for(int i=1;i<=nc-2;i++){
		int n;
		n=abs(-(p+i-nc-1)[0]-2*(p+i-nc-1)[1]-(p+i-nc-1)[2]+(p+i+nc-1)[0]+2*(p+i+nc-1)[1]+(p+i+nc-1)[2])/8;
		if(n<=level)
			p1[i]=n;
		else
			p1[i]=level;

	}

}
namedWindow("src");
namedWindow("result");
imshow("src",img);
imshow("result",img3);
 

waitKey(0);
	return 0;


}
 



不知道是不是我理解错误~怎么感觉就不怎么好看不像那么一回事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值