资源简介

灰度共生矩阵的实现,环境为vs2010+opencv2,参考书本为数字图像处理与机器视觉P386。仅供参考。倾听宝贵意见。

资源截图

代码片段和文件信息

#include “stdafx.h“
#include 
#include 

using namespace cv;
using namespace std;

void LQGetGLCM_Horizon(Mat& input Mat& dst)
{
Mat src = input;
CV_Assert(1 == src.channels());
src.convertTo(src CV_32S);
int height = src.rows;
int width  = src.cols;

/// 统计灰度级总数
int maxpixel = 0;
for(int j = 0; j < height; j++)
{
int* srcdata = src.ptr(j);
for (int i = 0; i < width; i++)
{  
if(srcdata[i] > maxpixel)
{
maxpixel = srcdata[i];
}
 }
}
maxpixel++;
dst.create(maxpixel maxpixel CV_32SC1);
dst = Scalar::all(0);
int temp;

    for(int j = 0; j < height; j++)
{
int* srcdata = src.ptr(j);
for (int i = 0; i < width-1; i++)
{  
temp = srcdata[i] - srcdata[i+1];
if(temp > 0)
dst.ptr(srcdata[i+1])[srcdata[i]]++;
else
dst.ptr(srcdata[i])[srcdata[i+1]]++;
}
}
for (int j = 0; j < maxpixel; j++)
{
for (int i = j+1; i < maxpixel; i++)
{
temp = dst.ptr(j)[i] + dst.ptr(i)[j];
dst.ptr(j)[i] = temp;
dst.ptr(i)[j] = temp;
}
}

}

void LQGetGLCM_Vertical(Mat& input Mat& dst)
{
Mat src = input;
CV_Assert(1 == src.channels());
src.convertTo(src CV_32S);
int height = src.rows;
int width  = src.cols;

/// 统计灰度级总数
int maxpixel = 0;
for(int j = 0; j < height; j++)
{
int* srcdata = src.ptr(j);
for (int i = 0; i < width; i++)
{  
if(srcdata[i] > maxpixel)
{
maxpixel = srcdata[i];
}
}
}
maxpixel++;
dst.create(maxpixel maxpixel CV_32SC1);
dst = Scalar::all(0);
int temp;

for(int j = 0; j < height-1; j++)
{
int* srcdata = src.ptr(j);
for (int i = 0; i < width; i++)
{  
temp = srcdata[i] - src.ptr(j+1)[i]/*srcdata[i+1]*/;
if(temp > 0)
dst.ptr(src.ptr(j+1)[i])[srcdata[i]]++;
else
dst.ptr(srcdata[i])[src.ptr(j+1)[i]]++;
}
}
for (int j = 0; j < maxpixel; j++)
{
for (int i = j+1; i < maxpixel; i++)
{
temp = dst.ptr(j)[i] + dst.ptr(i)[j];
dst.ptr(j)[i] = temp;

评论

共有 条评论