| 查看: 247 | 回复: 0 | |||
[求助]
分水岭算法中计算输入图像的梯度这段代码是什么意思
|
|
先上代码,代码是我从网上下的,用MFC写的 void CMyImageDBDoc::GetGradient(BYTE* image, INT width, INT height , FLOAT* deltar, FLOAT* deltasita) //得到输入图像的梯度; { //下面计算各像素在水平和垂直方向上的梯度,边缘点梯度计为0; INT* deltaxarr; INT* deltayarr; INT grawidth = width; INT graheight = height; INT deltacount = grawidth * graheight; deltaxarr = new INT[deltacount]; deltayarr = new INT[deltacount]; //暂不计算边缘点; for (INT y=1; y for (INT x=1; x INT inarrpos = ((y)*width + (x))*3 + 1;//在输入块中的位置; INT deltaarrpos = y*grawidth + x;//在梯度数组中的位置; //卷积计算; deltaxarr[deltaarrpos] = (INT) ( ( image[((y-1)*width + (x+1))*3 + 1] //右上 + image[((y)*width + (x+1))*3 + 1] //右 + image[((y+1)*width + (x+1))*3 + 1] //右下 - image[((y-1)*width + (x-1))*3 + 1] //左上 - image[((y)*width + (x-1))*3 + 1] //左 - image[((y+1)*width + (x-1))*3 + 1] ) / 3 );//左下 deltayarr[deltaarrpos] = (INT) ( ( image[((y-1)*width + (x+1))*3 + 1] //右上 + image[((y-1)*width + (x))*3 + 1] //上 + image[((y-1)*width + (x-1))*3 + 1] //左上 - image[((y+1)*width + (x-1))*3 + 1] //左下 - image[((y+1)*width + (x))*3 + 1] //下 - image[((y+1)*width + (x+1))*3 + 1]) / 3 );//右下 } } //边缘赋为其内侧点的值; for (y=0; y INT x1 = 0; INT pos1 = y*grawidth + x1; deltaxarr[pos1] = deltaxarr[pos1+1]; deltayarr[pos1] = deltayarr[pos1+1]; INT x2 = grawidth-1; INT pos2 = y*grawidth + x2; deltaxarr[pos2] = deltaxarr[pos2-1]; deltayarr[pos2] = deltayarr[pos2-1]; } for (INT x=0; x INT y1 = 0; INT pos1 = x; INT inner = x + grawidth;//下一行; deltaxarr[pos1] = deltaxarr[inner]; deltayarr[pos1] = deltayarr[inner]; INT y2 = graheight-1; INT pos2 = y2*grawidth + x; inner = pos2 - grawidth;//上一行; deltaxarr[pos2] = deltaxarr[inner]; deltayarr[pos2] = deltayarr[inner]; } for (y=0; y for (x=0; x INT temppos = y*grawidth + x; if ( (deltaxarr[temppos])==0 ) { if (deltayarr[temppos]!=0) { deltasita[temppos] = 0;//水平方向; deltar[temppos] = (FLOAT) abs(deltayarr[temppos]); } else { deltasita[temppos] = -1;//无确定方向; deltar[temppos] = (FLOAT) abs(deltayarr[temppos]); } continue; } deltasita[temppos] = (FLOAT) ( atan( (FLOAT)deltayarr[temppos] / (FLOAT)deltaxarr[temppos] ) + PI/2. ); deltar[temppos] = (FLOAT) sqrt((DOUBLE) ( deltayarr[temppos]*deltayarr[temppos] + deltaxarr[temppos]*deltaxarr[temppos] ) ); } } delete [] deltaxarr; deltaxarr = NULL; //删除水平和垂直梯度数组; delete [] deltayarr; deltayarr = NULL; } 我想问的是, INT inarrpos = ((y)*width + (x))*3 + 1;//在输入块中的位置; 这段代码是什么意思呢,为什么要乘以3再加1,然后还有下面这整个循环啥意思,我也不明白,请懂的人详细给我说说这段代码 for (y=0; y for (x=0; x INT temppos = y*grawidth + x; if ( (deltaxarr[temppos])==0 ) { if (deltayarr[temppos]!=0) { deltasita[temppos] = 0;//水平方向; deltar[temppos] = (FLOAT) abs(deltayarr[temppos]); } else { deltasita[temppos] = -1;//无确定方向; deltar[temppos] = (FLOAT) abs(deltayarr[temppos]); } continue; } deltasita[temppos] = (FLOAT) ( atan( (FLOAT)deltayarr[temppos] / (FLOAT)deltaxarr[temppos] ) + PI/2. ); deltar[temppos] = (FLOAT) sqrt((DOUBLE) ( deltayarr[temppos]*deltayarr[temppos] + deltaxarr[temppos]*deltaxarr[temppos] ) ); } } [ 来自科研家族 哲学人生 ] |
» 猜你喜欢
到新单位后,换了新的研究方向,没有团队,持续积累2区以上论文,能申请到面上吗
已经有13人回复
博士申请都是内定的吗?
已经有6人回复
之前让一硕士生水了7个发明专利,现在这7个获批发明专利的维护费可从哪儿支出哈?
已经有5人回复
博士读完未来一定会好吗
已经有29人回复
投稿精细化工
已经有4人回复
高职单位投计算机相关的北核或SCI四区期刊推荐,求支招!
已经有4人回复
导师想让我从独立一作变成了共一第一
已经有9人回复
读博
已经有4人回复
心脉受损
已经有5人回复
Springer期刊投稿求助
已经有4人回复

找到一些相关的精华帖子,希望有用哦~
SEM图片平均晶粒尺寸的计算
已经有7人回复
论文修回后编辑给出如下意见,有些看不懂什么意思,指高人指点
已经有25人回复
求回归方程参数估计的最优化算法matlab代码
已经有9人回复
求助hydridosilanes单词的意思?
已经有1人回复
服务器上计算,图形界面及图像处理问题思考
已经有19人回复
关于Dictra计算的问题(主要是参数调整,数据库数据添加)
已经有20人回复
求:如何用简便方法把图像的边缘进行清晰处理
已经有16人回复
【求助】PBE0 计算Si、Ge能带结构
已经有9人回复
【求助】哪位高手帮我翻译下这段英文算法的说明【已解决】
已经有5人回复
【资源】提高优化计算系统程序的应用软件!
已经有4人回复
【求助】算法和计算复杂性,就业前途如何?
已经有4人回复
科研从小木虫开始,人人为我,我为人人













回复此楼
点击这里搜索更多相关资源