比较两段代码:计算图像的灰度共生矩阵

ptsntwsz 2011-08-26 12:07:45
网上找到一段代码,其中计算(对称)灰度共生矩阵的部分如下:
	/*--------------------------------------------------------------------------
3.计算四个共生矩阵P,取距离为1,角度分别为0,45,90,135
--------------------------------------------------------------------------*/
CvMat* mat_co[4];
for (dim=0;dim<4;dim++)
{
mat_co[dim] = cvCreateMat(16,16,CV_64FC1);
cvZero(mat_co[dim]);
}

for(m=0;m<16;m++)//灰度级
{
for(n=0;n<16;n++)
{
for(j=0;j<nH;j++)//图像大小尺寸
{
for(i=0;i<nW;i++)
{
uchar temp = CV_MAT_ELEM(*mat_low_uchar,uchar,j,i);
double tempmatvalue;

if (i<(nW-1)&&temp==m&&(CV_MAT_ELEM(*mat_low_uchar,uchar,j,i+1)==n))
{
tempmatvalue = cvGetReal2D(mat_co[0],m,n);
cvSetReal2D(mat_co[0],m,n,(tempmatvalue+1.0));
cvSetReal2D(mat_co[0],n,m,(tempmatvalue+1.0));
}
if (j>0&&i<(nW-1)&&temp==m&&(CV_MAT_ELEM(*mat_low_uchar,uchar,j-1,i+1))==n)
{
tempmatvalue = cvGetReal2D(mat_co[1],m,n);
cvSetReal2D(mat_co[1],m,n,(tempmatvalue+1.0));
cvSetReal2D(mat_co[1],n,m,(tempmatvalue+1.0));
}
if (j<(nH-1)&&temp==m&&(CV_MAT_ELEM(*mat_low_uchar,uchar,j+1,i))==n)
{
tempmatvalue = cvGetReal2D(mat_co[2],m,n);
cvSetReal2D(mat_co[2],m,n,(tempmatvalue+1.0));
cvSetReal2D(mat_co[2],n,m,(tempmatvalue+1.0));
}
if (j<(nH-1)&&i<(nW-1)&&temp==m&&(CV_MAT_ELEM(*mat_low_uchar,uchar,j+1,i+1))==n)
{
tempmatvalue = cvGetReal2D(mat_co[3],m,n);
cvSetReal2D(mat_co[3],m,n,(tempmatvalue+1.0));
cvSetReal2D(mat_co[3],n,m,(tempmatvalue+1.0));
}
}
}
if(m==n)
for (dim=0;dim<4;dim++)
{
double tempmatvalue1 = cvGetReal2D(mat_co[dim],m,n);
cvSetReal2D(mat_co[dim],m,n,(tempmatvalue1*2));
}
}
}

感觉这个四层循环复杂度有点高的,运行的时候一幅图片要好几秒钟(后面还有进一步的规范化、计算熵等),而且它那个计算方法没怎么看懂,于是自己按照定义又写了一段代码:
	int delta[4][2] = {{0,1}, {-1,1}, {1,0}, {1,1}};
int p = 0;
int x, y;
for (j = 0; j < nH; j++) {
for (i = 0; i < nW; i++) {
x = CV_MAT_ELEM(*mat_low_uchar, uchar, j, i);
for (p = 0; p < 4; p++) {
if (j + delta[p][0] < nH && j + delta[p][0] >= 0 && i + delta[p][1] < nW && i + delta[p][1] >= 0) {
y = CV_MAT_ELEM(*mat_low_uchar, uchar, j + delta[p][0], i + delta[p][1]);
cvSetReal2D(mat_co[p], x, y, cvGetReal2D(mat_co[p], x, y) + 1.0);
cvSetReal2D(mat_co[p], y, x, cvGetReal2D(mat_co[p], y, x) + 1.0);
}
}
}
}

检查发现,二者得出的结果是完全一样的。
但是,运行的时候发现,似乎我的代码也需要花比较多的时间。。。没有精确比较二者的运行时间,只是感觉上都得等上3、4秒钟。
麻烦分析一下上述两段代码,比较一下优劣,还有就是说下第一段代码计算的原理,感觉没怎么明白的。
谢谢了!
...全文
381 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
guanyuechen 2012-05-24
  • 打赏
  • 举报
回复
从循环次数就可以知道,第一种思路循环了16*16*nw*nh次,第二种则只循环了nw*nh次,正如我上面说的,循环次数第一种为第二种的256倍。
正常情况下,求一张图(假设1024*1024)的GLCM也就不到0.001秒
guanyuechen 2012-05-24
  • 打赏
  • 举报
回复
一般是用第二种代码
第一种的思想是遍历共生矩阵,对于共生矩阵的每个值,都查找一遍全图,然后确定共生矩阵的值;
第二种的思路是遍历全图,对于每找到一对像素,都在共生矩阵相应的地方加上1,就像我们用“正”来计数一样。
前者的时间复杂度是后者的256倍(假设你的共生矩阵式16*16的),而且还有判断的过程,所以所耗时间是后者的256倍以上。
类似地,计算直方图,也是按第二种思路,要是用第一种,太慢了!!
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 ### HSMS/SEMI通讯E37说明书中文关键知识点 #### 一、HSMS概述 - **HSMS**(High-Speed SECS Message Service)是一种专为半导体工厂内部计算机之间进行高速消息传输而构建的通信标准。该标准旨在逐步取代原有的SEMIE4(SECS-I)和SEMIE13(SECS Message Service),特别是在需要高速数据交换或简单的点对点拓扑结构无法满足实际需求的情况下。 - HSMS的核心宗旨在于提供一种机制,使来自不同制造商的设备能够达成无缝对接和互操作状态,即便这些设备在设计理念和通信机制上存在显著差异。 - HSMS不仅适用于TCP/IP优先于OSI模型的应用环境,同时也能作为SEMIE4和SEMIE13的有效替代方案。 #### 二、HSMS的应用范围 - HSMS主要部署于半导体制造业中的计算机系统之间进行消息交换的场景,如自动化生产线、设备监控系统等。 - 该标准界定了通信接口,使得半导体工厂内的各类设备能够实现高效且可靠的数据传输。 #### 三、HSMS与其他标准的关系 - **SEMIE4 (SECS-I)**:规定了消息传输的基本规则和格式。 - **SEMIE5 (SECS-II)**:明确了消息的具体内容和结构。 - **IETF Documents**: - RFC791 - Internet协议 - RFC792 - Internet控制消息协议 - RFC793 - 传输控制协议 - RFC1120 - Internet主机通信层的要求 - RFC1340 - 指定号码 - **POSIX D...
内容概要:本文系统研究了虚拟同步发电机(VSG)的惯量-阻尼协同自适应并网控制策略,旨在提升微电网在并网过程中的频率稳定性与动态响应能力。通过Simulink搭建VSG控制模型,结合Matlab实现算法仿真,深入分析了惯量与阻尼参数的自适应调节机制,并融合黑启动、预同步控制、虚拟阻抗等关键技术,有效增强了系统在电网频率波动下的鲁棒性与功率分配均衡性。研究不仅构建了完整的VSG双机并联仿真平台,还验证了所提控制策略在微电网黑启动、并网切换及负载突变等典型工况下的可行性与优越性,为新能源并网系统的稳定性控制提供了理论依据与技术支撑。; 适合人群:具备电力系统、自动化、电气工程等相关专业背景,熟悉Matlab/Simulink仿真环境,从事新能源并网、微电网控制、虚拟同步机技术、电力电子与电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握虚拟同步发电机的核心控制原理及其在微电网中的应用;②学习惯量与阻尼参数的协同自适应调控方法,提升系统频率响应性能;③通过Simulink搭建双机并联VSG系统,完成黑启动、预同步、功率均分等关键过程的仿真验证;④为科研论文复现、课题设计或实际工程项目提供可复用的模型与算法参考。; 阅读建议:建议读者结合文中所述仿真模型与代码资源,按照控制策略的设计流程逐步实践,重点关注参数整定、控制环路设计及系统稳定性判据的分析。推荐关注公众号“荔枝科研社”获取完整资料包,以便深入理解并拓展至更复杂的多源协同控制场景。

4,511

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧