//.cpp
double CImgProcess::shang()
{
double s, h;
double nHeight = GetHeight(); //获取图像像素高度
double nWidth = GetWidthPixel(); //获取图像像素宽度
int array[256]={0};
double p[256]={0};
int i, j, n; //循环变量
s=nHeight*nWidth; //求总的像素个数
h=0;
for(n=0; n<256; n++) //像素灰度级小于256进行循环
{
for(i=0; i<nHeight; i++) //高度小于图像像素高度进行循环
{
for(j=0; j<nWidth; j++) //宽度小于像素宽度进行循环
{
if(GetGray(j,i)==n) //统计灰度级为n的像素个数
{ array[n]++;
p[n]=array[n]/s; //求出灰度级n所占的比例
}
}
}
}
for(n=0;n<256;n++) //像素灰度级小于256进行循环
{
if(p[n]!=0) //找到概率不为0的灰度级n
{
h=h-p[n]*log(p[n])/log(2); //熵的累加计算公式
}
}
return h;
}
//.h
double shang();
//Edit code
void CDIPDemoView::OnShang()
{
//计算灰度共现矩阵
// 获得文档类指针
CDIPDemoDoc* pDoc = GetDocument();
// 输入对象
CImgProcess imgInput = pDoc->m_Image;
// 检查图像是灰度图像
if (imgInput.m_pBMIH->biBitCount!=8)
{
AfxMessageBox("不是8-bpp灰度图像,无法处理!");
return;
}
double h=imgInput.shang();
CString str;
str.Format("{%.2lf}",h);
AfxMessageBox(str);
}
//.cpp
double CImgProcess::fangcha()
{
double a,b;
double nHeight = GetHeight(); //获取图像的像素高
double nWidth = GetWidthPixel(); //获取图像的像素宽
double p[256]={0}; //像素灰度的概率初设
int array[256]={0};
int i, j, n; //循环变量
double s=0;
b=0;
for(i=0; i<nHeight; i++) //高度小于图像像素高就进行循环
{
for(j=0; j<nWidth; j++) //宽度小于图像像素宽就进行循环
{
s=s+GetGray(j,i); //求所有像素点的灰度值和
}
}
a=s/(nHeight*nWidth); //均值=灰度值和/像素点和
for(n=0; n<256; n++) //像素灰度级小于256进行循环
{
for(i=0; i<nHeight; i++) //小于图像像素高就进行循环
{
for(j=0; j<nWidth; j++) //小于图像像素宽就进行循环
{
if(GetGray(j,i)==n) //统计出每个灰度级的像素点个数
{ array[n]++;
}
}
}
}
for(n=0;n<256;n++)
{
p[n]=array[n]/(nHeight*nWidth);//求出每个灰度级的概率
}
for(n=0; n<256; n++)
{
b=b+(n-a)*(n-a)*p[n]; //基于灰度直方图的图像方差计算公式
}
return b;
}
//.h
double fangcha();
//Edit code
void CDIPDemoView::OnFangcha()
{
//计算灰度共现矩阵
// 获得文档类指针
CDIPDemoDoc* pDoc = GetDocument();
// 输入对象
CImgProcess imgInput = pDoc->m_Image;
// 检查图像是灰度图像
if (imgInput.m_pBMIH->biBitCount!=8)
{
AfxMessageBox("不是8-bpp灰度图像,无法处理!");
return;
}
double b=imgInput.fangcha();
CString str;
str.Format("{%.2lf}",b);
AfxMessageBox(str);
}
//Edit code
void CDIPDemoView::OnDuibidu()//计算灰度共生矩阵
{ // 获得文档类指针
CDIPDemoDoc* pDoc = GetDocument();
CImgProcess imgInput = pDoc->m_Image; // 输入对象
if (imgInput.m_pBMIH->biBitCount!=8) // 检查图像是灰度图像
{
AfxMessageBox("不是8-bpp灰度图像,无法处理!");
return;
}
POINT ptD1, ptD2; //设定两个点的位置关系
//水平灰度共生矩阵
ptD1.x = 1;
ptD1.y = 0;
ptD2.x = -1;
ptD2.y = 0;
/*
//+45度灰度共生矩阵
ptD1.x = 1;
ptD1.y = -1;
ptD2.x = -1;
ptD2.y = +1;
*/
//计算灰度共现矩阵
vector< vector<int> > GrayMat = imgInput.GetGrayMatrix(ptD1, ptD2);
CString str;
double s=0;
double t=0;
int i,j;
int m = GrayMat.size(); //灰度公式矩阵的元素个数m
for(i=0; i<m; i++) //i小于m就进行循环
{
for(j=0; j<m; j++) //j小于m就进行循环
{
s=GrayMat[j][i]+s; //灰度公式矩阵元素值累加
}
}
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
t=(GrayMat[j][i]/s)*(i-j)*(i-j)+t; //对比度计算公式
}
} //弹出对话框,显示灰度共现矩阵
str.Format("{%.4lf}", t);
AfxMessageBox(str);
}
//Edit code
void CDIPDemoView::OnXiangguandu()
{ //计算灰度共现矩阵
// 获得文档类指针
CDIPDemoDoc* pDoc = GetDocument();
CImgProcess imgInput = pDoc->m_Image; // 输入对象
if (imgInput.m_pBMIH->biBitCount!=8) // 检查图像是灰度图像
{
AfxMessageBox("不是8-bpp灰度图像,无法处理!");
return;
}
POINT ptD1, ptD2; //设定两个点的位置关系
//水平灰度共生矩阵
ptD1.x = 1;
ptD1.y = 0;
ptD2.x = -1;
ptD2.y = 0;
/* //+45度灰度共现矩阵
ptD1.x = 1;
ptD1.y = -1;
ptD2.x = -1;
ptD2.y = +1;
*/ //计算灰度共生矩阵
vector< vector<int> > GrayMat = imgInput.GetGrayMatrix(ptD1, ptD2);
CString str;
double s=0;
double t=0;
double a=0;
double b=0;
double c=0;
double d=0;
double q=0;
int i,j;
int m = GrayMat.size(); //灰度共生矩阵元素个数
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
s=GrayMat[j][i]+s; //求出灰度共生矩阵所有元素和
}
}
for(i=0; i<m; i++) //i小于m进行循环
{
for(j=0; j<m; j++) //j小于m进行循环
{
a=(GrayMat[j][i]/s)*i+a; //相关性中μx
}
}
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
b=(GrayMat[j][i]/s)*j+b; //相关性中μy
}
}
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
c=(GrayMat[j][i]/s)*(i-a)*(i-a)+c; //相关性中σx
}
}
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
d=(GrayMat[j][i]/s)*(j-b)*(j-b)+d; //相关性中σy
}
}
for(i=0; i<m; i++)
{
for(j=0; j<m; j++)
{
q=q+(GrayMat[j][i]/s)*i*j; //相关性计算公式
}
}
t=(q-a*b)/(sqrt(c*d)); //相关性计算公式
str.Format("{%.4lf}", t); //弹出对话框,显示灰度共生矩阵
AfxMessageBox(str);
}
C++转java,用于Android studio做app,带注释最好
这里面用了不知名的类库哦,不太好转哦。是opencv吗
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y