利用OpenCV实现图像纹理特征提取

这个程序是简单地图像纹理特征提取,参考代码如下所示:

IplImage * cvSampleImageTextureExtraction(IplImage* img,IplImage* dst){
	uchar* data=(uchar*)img->imageData;
	int step=img->widthStep;
	//IplImage* dst=cvCreateImage(cvSize(img->width,img->height),img->depth,1);
	dst->widthStep=img->widthStep;

	CvScalar s;
	int tmp[8]={0};
	int sum=0;int k=0;
	
	for(int i=1;i<img->height-1;i++)
		for(int j=1;j<img->width-1;j++){
			if(data[(i-1)*step+j-1]>data[i*step+j])
				tmp[0]=1;
			else 
				tmp[0]=0;
			if(data[i*step+(j-1)]>data[i*step+j]) 
				tmp[1]=1;
			else 
				tmp[1]=0;
			if(data[(i+1)*step+(j-1)]>data[i*step+j]) 
				tmp[2]=1;
			else 
				tmp[2]=0;
			if (data[(i+1)*step+j]>data[i*step+j]) 
				tmp[3]=1;
			else 
				tmp[3]=0;
			if (data[(i+1)*step+(j+1)]>data[i*step+j]) 
				tmp[4]=1;
			else tmp[4]=0;
			if(data[i*step+(j+1)]>data[i*step+j]) 
				tmp[5]=1;
			else 
				tmp[5]=0;
			if(data[(i-1)*step+(j+1)]>data[i*step+j]) 
				tmp[6]=1;
			else 
				tmp[6]=0;
			if(data[(i-1)*step+j]>data[i*step+j]) 
				tmp[7]=1;
			else 
				tmp[7]=0;

			for(k=0;k<=7;k++)
				sum+=abs(tmp[k]-tmp[k+1]);
			sum=sum+abs(tmp[7]-tmp[0]);
			if (sum<=2)
				s.val[0]=(tmp[0]*128+tmp[1]*64+tmp[2]*32+tmp[3]*16+tmp[4]*8+tmp[5]*4+tmp[6]*2+tmp[7]);
			else 
				s.val[0]=59; 
			cvSet2D(dst,i,j,s);
		}
		return dst;
}
测试结果输出如下所示:

输出图像纹理效果图如下图所示:


关于Image Engineering & Computer Vision的更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.


OpenCV中的共生矩阵是一种用于纹理特征提取的方法,它通常用于计算机视觉中的图像分析和模式识别任务。共生矩阵是由Hunt and DeRose在1987年提出的一种统计描述方法,用于捕捉纹理的局部统计信息,尤其是方向和空间的相关性。 具体来说,共生矩阵是通过计算两个邻近像素值之间的协方差来构建的。对于每个像素,你会选择其周围的一组邻域(比如3x3或5x5窗口),然后计算这个区域中两个特定方向上像素值的差异(通常是垂直和水平方向)。将这些差异乘积相加得到共生矩阵的一个条目,整个矩阵会反映纹理的局部结构和方向依赖性。 以下是共生矩阵纹理特征提取的基本步骤: 1. **预处理**:首先对图像进行灰度化和噪声过滤,以便更好地提取特征。 2. **构造共生矩阵**:遍历图像,对于每个像素及其邻居,计算不同方向(如45°和-45°)的像素值差并将其乘起来。 3. **归一化**:由于共生矩阵的值可能会受到像素值范围的影响,通常会对矩阵进行归一化,例如除以像素值的标准差。 4. **特征提取**:从归一化的共生矩阵中提取特征,这可能包括计算矩阵的某些统计量(如平均值、标准差、最大值等)或者使用更复杂的特征描述子(如局部二值模式,LBP)。 5. **应用到任务**:最后,这些纹理特征可以作为输入到分类器、识别算法或其他机器学习模型中,用于区分不同的纹理类别。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值