{"id":1137,"date":"2023-10-24T01:32:40","date_gmt":"2023-10-24T01:32:40","guid":{"rendered":"https:\/\/www.gislxz.com\/?p=1137"},"modified":"2023-10-24T01:32:41","modified_gmt":"2023-10-24T01:32:41","slug":"%e6%a0%85%e6%a0%bcglcm%e4%bb%a5%e5%8f%8amorans-i%e6%8c%87%e6%95%b0%e8%ae%a1%e7%ae%97","status":"publish","type":"post","link":"https:\/\/www.gislxz.com\/index.php\/2023\/10\/24\/%e6%a0%85%e6%a0%bcglcm%e4%bb%a5%e5%8f%8amorans-i%e6%8c%87%e6%95%b0%e8%ae%a1%e7%ae%97\/","title":{"rendered":"\u6805\u683cGLCM\u4ee5\u53caMoran&#8217;s I\u6307\u6570\u8ba1\u7b97"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">GLCM<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#pragma once\r\n#include &lt;iostream>\r\n\r\n\/\/GLCM\u7eb9\u7406\u7279\u5f81\r\ntemplate&lt;typename T>\r\nclass GLCM\r\n{\r\npublic:\r\n\t\/\/\u6784\u9020\u51fd\u6570\r\n\t\/\/\u53c2\u6570\uff1a\u539f\u59cb\u56fe\u50cf\uff08\u4e8c\u7ef4\u6570\u7ec4\uff09\uff0c\u884c\u6570\uff0c\u5217\u6570\uff0c\u9700\u8981\u5206\u7ea7\u7684\u6570\u91cf\uff0c\u56fe\u50cf\u6700\u5c0f\u503c\uff0c\u56fe\u50cf\u6700\u5927\u503c\r\n\tGLCM(T** const image, const int&amp; rowNum, const int&amp; colNum, const int&amp; levelNum, const T&amp; minValue, const T&amp; maxValue):\r\n\t\tm_colNum(colNum),m_rowNum(rowNum),m_levelNum(levelNum)\r\n\t{\r\n\t\tbuildLevelImage(image, rowNum, colNum, levelNum, minValue, maxValue);\r\n\t}\r\n\t\/\/\u6790\u6784\u51fd\u6570\r\n\t~GLCM() {\r\n\t\t\/\/\u91ca\u653e\u6bd4\u7279\u5316\u6570\u7ec4\r\n\t\tfor (int i = 0; i &lt; m_rowNum; i++)\r\n\t\t\tdelete&#91;] m_levelImage&#91;i];\r\n\t\tdelete m_levelImage;\r\n\t\t\/\/\u91ca\u653eGLCM\u77e9\u9635\r\n\t\tfor (int i = 0; i &lt; m_levelNum; i++)\r\n\t\t\tdelete&#91;] m_GLCMMatrix&#91;i];\r\n\t\tdelete m_GLCMMatrix;\r\n\t\t\/\/\u91ca\u653e\u5f52\u4e00\u5316GLCM\u77e9\u9635\r\n\t\tfor (int i = 0; i &lt; m_levelNum; i++)\r\n\t\t\tdelete&#91;] m_normalizeGLCM&#91;i];\r\n\t\tdelete m_normalizeGLCM;\r\n\t}\r\n\r\npublic:\r\n\t\/\/\u5efa\u7acb\u6bd4\u7279\u5316\u6570\u7ec4\r\n\tvoid buildLevelImage(T** const image, const int&amp; rowNum, const int&amp; colNum, const int&amp; levelNum, const T&amp; minValue, const T&amp; maxValue);\r\n\r\n\t\/\/\u8ba1\u7b97GLCM\u77e9\u9635&amp;\u5f52\u4e00\u5316\r\n\t\/\/\u8f93\u5165\u6b65\u957f\uff0c\u662f\u5426\u53cc\u5411\r\n\tvoid buildGLCM(const int stepI, const int stepJ, const bool bidirectional);\r\n\r\n\t\/\/\u8ba1\u7b97\u7279\u5f81\r\n\t\/\/\u5bf9\u6bd4\u5ea6\r\n\tfloat calCon();\r\n\t\/\/\u80fd\u91cf\r\n\tfloat calEng();\r\n\t\/\/\u540c\u8d28\u6027\r\n\tfloat calHom();\r\n\r\npublic:\r\n\t\/\/\u6570\u7ec4\u5c3a\u5bf8\r\n\tconst int m_rowNum;\r\n\tconst int m_colNum;\r\n\t\/\/\u5206\u7ea7\u6570\r\n\tconst int m_levelNum;\r\n\t\/\/\u6709\u6548\u50cf\u5143\u5bf9\r\n\tint m_valueCount;\r\n\t\/\/\u6bd4\u7279\u5316\u6570\u7ec4\r\n\tint** m_levelImage;\r\n\t\/\/GLCM\u6570\u7ec4\r\n\tint** m_GLCMMatrix;\r\n\t\/\/\u5f52\u4e00\u5316GLCM\u6570\u7ec4\r\n\tfloat** m_normalizeGLCM;\r\n};\r\n\r\ntemplate&lt;typename T>\r\nvoid GLCM&lt;T>::buildLevelImage(T** const image, const int&amp; rowNum, const int&amp; colNum, const int&amp; levelNum, const T&amp; minValue, const T&amp; maxValue)\r\n{\r\n\t\/\/\u5efa\u7acb\u6bd4\u7279\u5316\u6570\u7ec4\r\n\tm_levelImage = new int* &#91;m_rowNum];\r\n\tfor (int i = 0; i &lt; m_rowNum; i++) {\r\n\t\tm_levelImage&#91;i] = new int&#91;m_colNum];\r\n\t\tfor (int j = 0; j &lt; m_colNum; j++) {\r\n\t\t\t\/\/ \u5904\u7406nodata\u503c,\u7528-1\u8868\u793a\r\n\t\t\tif (image&#91;i]&#91;j]&lt;minValue || image&#91;i]&#91;j]>maxValue)\r\n\t\t\t\tm_levelImage&#91;i]&#91;j] = -1;\r\n\t\t\telse {\r\n\t\t\t\t\/\/ \u5f52\u4e00\u5316\r\n\t\t\t\t\/\/ \u7279\u6b8a\u60c5\u51b5\uff1a\u503c\u521a\u597d\u662f\u4e0a\u754c\uff0c\u4e3a\u4e86\u9632\u6b62\u7ea7\u6570\u6ea2\u51fa\uff0c\u8f6c\u6210\u7ea7\u6570-1\r\n\t\t\t\tif (image&#91;i]&#91;j] == maxValue)\r\n\t\t\t\t\tm_levelImage&#91;i]&#91;j] = m_levelNum - 1;\r\n\t\t\t\telse\r\n\t\t\t\t\tm_levelImage&#91;i]&#91;j] = static_cast&lt;int>(((image&#91;i]&#91;j] - minValue) \/ (maxValue - minValue)) * m_levelNum);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\/\/\u6d4b\u8bd5\u4ee3\u7801\uff0c\u6253\u5370\u8f93\u51fa\r\n\t\/\/for (int i = 0; i &lt; m_rowNum; i++) {\r\n\t\/\/\tfor (int j = 0; j &lt; m_colNum; j++) {\r\n\t\/\/\t\tstd::cout &lt;&lt; m_levelImage&#91;i]&#91;j] &lt;&lt; \" \";\r\n\t\/\/\t}\r\n\t\/\/\tstd::cout &lt;&lt; std::endl;\r\n\t\/\/}\r\n}\r\n\r\ntemplate&lt;typename T>\r\nvoid GLCM&lt;T>::buildGLCM(const int stepI, const int stepJ, const bool bidirectional)\r\n{\r\n\t\/\/\u521d\u59cb\u5316GLCM\u77e9\u9635(\u8d4b\u503c0)\r\n\tm_GLCMMatrix = new int* &#91;m_levelNum];\r\n\tfor (int i = 0; i &lt; m_levelNum; i++) {\r\n\t\tm_GLCMMatrix&#91;i] = new int&#91;m_levelNum];\r\n\t\tfor (int j = 0; j &lt; m_levelNum; j++) {\r\n\t\t\tm_GLCMMatrix&#91;i]&#91;j] = 0;\r\n\t\t}\r\n\t}\r\n\t\/\/\u6709\u6548\u50cf\u5143\u5bf9\u6570\u91cf\r\n\tm_valueCount = 0;\r\n\t\/\/\u904d\u5386\u56fe\u50cf\uff0c\u8ba1\u7b97\r\n\tfor (int rowIndex = 0; rowIndex &lt; m_rowNum; rowIndex++) {\r\n\t\tfor (int colIndex = 0; colIndex &lt; m_colNum; colIndex++) {\r\n\t\t\t\/\/\u5224\u65ad\u662f\u5426\u6709\u6548\u6570\u636e\r\n\t\t\tif (m_levelImage&#91;rowIndex]&#91;colIndex] == -1)\r\n\t\t\t\tcontinue;\r\n\t\t\t\/\/\u5bf9\u5e94\u4f4d\u7f6e\u662f\u5426\u6709\u6548\uff08\u4f4d\u7f6e\u6709\u6548&amp;\u503c\u6709\u6548\uff09\r\n\t\t\tint tarPointI = rowIndex + stepI;\r\n\t\t\tint tarPointJ = colIndex + stepJ;\r\n\t\t\tif (tarPointI &lt; 0 || tarPointI >= m_rowNum || tarPointJ &lt; 0 || tarPointJ >= m_colNum)\r\n\t\t\t\tcontinue;\r\n\t\t\tif (m_levelImage&#91;tarPointI]&#91;tarPointJ] == -1)\r\n\t\t\t\tcontinue;\r\n\t\t\tm_valueCount++;\r\n\t\t\tint x = m_levelImage&#91;rowIndex]&#91;colIndex];\r\n\t\t\tint y = m_levelImage&#91;tarPointI]&#91;tarPointJ];\r\n\t\t\tm_GLCMMatrix&#91;x]&#91;y] += 1;\r\n\t\t}\r\n\t}\r\n\t\/\/\u5982\u679c\u53cc\u5411\uff0c\u518d\u7b97\u4e00\u904d\uff0c\u53ea\u4e0d\u8fc7\u662f\u51cf\u6b65\u957f\r\n\tfor (int rowIndex = 0; rowIndex &lt; m_rowNum; rowIndex++) {\r\n\t\tfor (int colIndex = 0; colIndex &lt; m_colNum; colIndex++) {\r\n\t\t\t\/\/\u5224\u65ad\u662f\u5426\u6709\u6548\u6570\u636e\r\n\t\t\tif (m_levelImage&#91;rowIndex]&#91;colIndex] == -1)\r\n\t\t\t\tcontinue;\r\n\t\t\t\/\/\u5bf9\u5e94\u4f4d\u7f6e\u662f\u5426\u6709\u6548\uff08\u4f4d\u7f6e\u6709\u6548&amp;\u503c\u6709\u6548\uff09\r\n\t\t\tint tarPointI = rowIndex - stepI;\r\n\t\t\tint tarPointJ = colIndex - stepJ;\r\n\t\t\tif (tarPointI &lt; 0 || tarPointI >= m_rowNum || tarPointJ &lt; 0 || tarPointJ >= m_colNum)\r\n\t\t\t\tcontinue;\r\n\t\t\tif (m_levelImage&#91;tarPointI]&#91;tarPointJ] == -1)\r\n\t\t\t\tcontinue;\r\n\t\t\tm_valueCount++;\r\n\t\t\tint x = m_levelImage&#91;rowIndex]&#91;colIndex];\r\n\t\t\tint y = m_levelImage&#91;tarPointI]&#91;tarPointJ];\r\n\t\t\tm_GLCMMatrix&#91;x]&#91;y] += 1;\r\n\t\t}\r\n\t}\r\n\t\/\/\u6d4b\u8bd5\u4ee3\u7801\uff0c\u6253\u5370GLCM\r\n\t\/*for (int i = 0; i &lt; m_levelNum; i++) {\r\n\t\tfor (int j = 0; j &lt; m_levelNum; j++)\r\n\t\t\tstd::cout &lt;&lt; m_GLCMMatrix&#91;i]&#91;j] &lt;&lt; \" \";\r\n\t\tstd::cout &lt;&lt; std::endl;\r\n\t}*\/\r\n\r\n\t\/\/\u5f52\u4e00\u5316\r\n\tm_normalizeGLCM = new float* &#91;m_levelNum];\r\n\tfor (int i = 0; i &lt; m_levelNum; i++) {\r\n\t\tm_normalizeGLCM&#91;i] = new float&#91;m_levelNum];\r\n\t\tfor (int j = 0; j &lt; m_levelNum; j++)\r\n\t\t\tm_normalizeGLCM&#91;i]&#91;j] = m_GLCMMatrix&#91;i]&#91;j] \/ static_cast&lt;float>(m_valueCount);\r\n\t}\r\n\t\/\/\u6d4b\u8bd5\u4ee3\u7801\uff0c\u6253\u5370\u5f52\u4e00\u5316GLCM\r\n\t\/\/for (int i = 0; i &lt; m_levelNum; i++) {\r\n\t\/\/\tfor (int j = 0; j &lt; m_levelNum; j++)\r\n\t\/\/\t\tstd::cout &lt;&lt; m_normalizeGLCM&#91;i]&#91;j] &lt;&lt; \" \";\r\n\t\/\/\tstd::cout &lt;&lt; std::endl;\r\n\t\/\/}\r\n}\r\n\r\ntemplate &lt;typename T>\r\nfloat GLCM&lt;T>::calCon() {\r\n\tfloat contrast = 0;\r\n\tfor (int i = 0; i &lt; m_levelNum; i++) {\r\n\t\tfor (int j = 0; j &lt; m_levelNum; j++)\r\n\t\t\tcontrast += (i - j) * (i - j) * m_normalizeGLCM&#91;i]&#91;j];\r\n\t}\r\n\treturn contrast;\r\n}\r\n\r\ntemplate &lt;typename T>\r\nfloat GLCM&lt;T>::calEng() {\r\n\tfloat energy = 0;\r\n\tfor (int i = 0; i &lt; m_levelNum; i++) {\r\n\t\tfor (int j = 0; j &lt; m_levelNum; j++)\r\n\t\t\tenergy += m_normalizeGLCM&#91;i]&#91;j] * m_normalizeGLCM&#91;i]&#91;j];\r\n\t}\r\n\treturn energy;\r\n}\r\n\r\ntemplate &lt;typename T>\r\nfloat GLCM&lt;T>::calHom() {\r\n\tfloat homogeneity = 0;\r\n\tfor (int i = 0; i &lt; m_levelNum; i++) {\r\n\t\tfor (int j = 0; j &lt; m_levelNum; j++)\r\n\t\t\thomogeneity += m_normalizeGLCM&#91;i]&#91;j] \/ (1 + (i - j) * (i - j));\r\n\t}\r\n\treturn homogeneity;\r\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Moran\u2018s I<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#pragma once\n#include &lt;iostream>\n\n\/\/\u83ab\u5170\u6307\u6570\ntemplate&lt;typename T>\nclass moran\n{\npublic:\n\t\/\/\u6784\u9020\u51fd\u6570\n\t\/\/\u53c2\u6570\uff1aimage\u539f\u59cb\u56fe\u50cf\uff0crowNum\u884c\u6570\uff0ccolumnNum\u5217\u6570\uff0cnodataValue\u65e0\u6570\u636e\u503c\n\tmoran(T** const image, int rowNum, int columnNum, T nodataValue):\n\tm_image(image),m_rowNum(rowNum),m_columnNum(columnNum),m_nodataValue(nodataValue)\n\t{\n\t\tcal_index();\n\t\tcal_WeightMatrix();\n\t}\n\t\/\/\u6790\u6784\u51fd\u6570\n\t~moran() {\n\t\t\/\/\u91ca\u653e\u50cf\u5143-\u6743\u91cd\u77e9\u9635\u7d22\u5f15\n\t\tfor (int rowIndex = 0; rowIndex &lt; m_rowNum; rowIndex++)\n\t\t\tdelete&#91;] m_matrixIndex&#91;rowIndex];\n\t\tdelete&#91;] m_matrixIndex;\n\t\t\/\/\u91ca\u653e\u6743\u91cd\u77e9\u9635\n\t\tfor (int rowIndex = 0; rowIndex &lt; m_pixelCount; rowIndex++)\n\t\t\tdelete&#91;] m_weightMatrix&#91;rowIndex];\n\t\tdelete&#91;] m_weightMatrix;\n\t\t\/\/\u91ca\u653e\u50cf\u5143\u503c-\u6743\u91cd\u77e9\u9635\u7d22\u5f15\n\t\tdelete&#91;] m_valueIndex;\n\t};\n\n\t\/\/\u8ba1\u7b97\u6805\u683c\u5bf9\u5e94\u7a7a\u95f4\u6743\u91cd\u77e9\u9635\u5e8f\u53f7\uff08\u6620\u5c04\u77e9\u9635\uff09\n\tvoid cal_index();\n\t\/\/\u8ba1\u7b97\u7a7a\u95f4\u6743\u91cd\u77e9\u9635\uff08\u5468\u56f48\u50cf\u7d20\u76f8\u90bb\u4e3a1\uff0c\u5426\u5219\u4e3a0\uff09\u3001\n\tvoid cal_WeightMatrix();\n\t\/\/\u8ba1\u7b97\u83ab\u5170\u6307\u6570\n\tdouble cal_moransI();\n\npublic:\n\t\/\/\u56fe\u50cf\u5730\u5740\n\tT** m_image;\n\t\/\/\u56fe\u50cf\u884c\u6570\n\tint m_rowNum;\n\t\/\/\u56fe\u50cf\u5217\u6570\n\tint m_columnNum;\n\t\/\/\u56fe\u50cf\u65e0\u6548\u503c\n\tT m_nodataValue;\n\t\/\/\u6709\u6548\u50cf\u5143\u8ba1\u6570\n\tint m_pixelCount;\n\t\/\/\u56fe\u50cf\u5e73\u5747\u503c\n\tdouble m_imageMean;\n\t\/\/\u50cf\u5143-\u6743\u91cd\u77e9\u9635\u7d22\u5f15\n\tint** m_matrixIndex;\n\t\/\/\u50cf\u5143\u503c-\u6743\u91cd\u77e9\u9635\u7d22\u5f15\n\tT* m_valueIndex;\n\t\/\/\u6743\u91cd\u77e9\u9635\n\tint** m_weightMatrix;\n\t\/\/\u6743\u91cd\u77e9\u9635\u548c\n\tint m_weightMatrixSum;\n};\n\ntemplate&lt;typename T>\nvoid moran&lt;T>::cal_index()\n{\n\t\/\/\u521d\u59cb\u5316\u6709\u6548\u50cf\u5143\u8ba1\u6570\n\tm_pixelCount = 0;\n\t\/\/\u521d\u59cb\u5316\u50cf\u5143-\u6743\u91cd\u77e9\u9635\u7d22\u5f15\uff08\u6620\u5c04\u77e9\u9635\uff09\n\tm_matrixIndex = new int* &#91;m_rowNum];\n\tfor (int rowIndex = 0; rowIndex &lt; m_rowNum; rowIndex++)\n\t\tm_matrixIndex&#91;rowIndex] = new int&#91;m_columnNum];\n\t\/\/\u521d\u59cb\u5316\u50cf\u5143\u503c-\u6743\u91cd\u77e9\u9635\u7d22\u5f15\n\tm_valueIndex = new T&#91;m_columnNum * m_rowNum];\n\t\/\/\u8ba1\u7b97\u6620\u5c04&amp;\u7d22\u5f15\n\tfor (int rowIndex = 0; rowIndex &lt; m_rowNum; rowIndex++) {\n\t\tfor (int columnIndex = 0; columnIndex &lt; m_columnNum; columnIndex++) {\n\t\t\tif (m_image&#91;rowIndex]&#91;columnIndex] == m_nodataValue)\n\t\t\t\tcontinue;\n\t\t\telse {\n\t\t\t\tm_matrixIndex&#91;rowIndex]&#91;columnIndex] = m_pixelCount;\n\t\t\t\tm_valueIndex&#91;m_pixelCount] = m_image&#91;rowIndex]&#91;columnIndex];\n\t\t\t\tm_pixelCount++;\n\t\t\t}\n\t\t}\n\t}\n}\n\ntemplate&lt;typename T>\nvoid moran&lt;T>::cal_WeightMatrix()\n{\n\t\/\/\u521d\u59cb\u5316\u6743\u91cd\u77e9\u9635\n\tm_weightMatrix = new int* &#91;m_pixelCount];\n\tfor (int rowIndex = 0; rowIndex &lt; m_pixelCount; rowIndex++)\n\t\tm_weightMatrix&#91;rowIndex] = new int&#91;m_pixelCount];\n\t\/\/\u8d4b\u521d\u503c\n\tfor (int rowIndex = 0; rowIndex &lt; m_pixelCount; rowIndex++) {\n\t\tfor (int columnIndex = 0; columnIndex &lt; m_pixelCount; columnIndex++)\n\t\t\tm_weightMatrix&#91;rowIndex]&#91;columnIndex] = 0;\n\t}\n\t\/\/\u521d\u59cb\u5316\u6743\u91cd\u77e9\u9635\u548c\n\tm_weightMatrixSum = 0;\n\t\/\/\u521d\u59cb\u5316\u56fe\u50cf\u5e73\u5747\u503c\n\tm_imageMean = 0;\n\t\/\/\u8ba1\u7b97\u6743\u91cd\u77e9\u9635\n\tfor (int rowIndex = 0; rowIndex &lt; m_rowNum; rowIndex++) {\n\t\tfor (int columnIndex = 0; columnIndex &lt; m_columnNum; columnIndex++) {\n\t\t\t\/\/\u68c0\u67e5\u81ea\u8eab\u662f\u5426\u4e3a\u7a7a\u503c\n\t\t\tif (m_image&#91;rowIndex]&#91;columnIndex] == m_nodataValue)\n\t\t\t\tcontinue;\n\t\t\t\/\/\u66f4\u65b0\u5e73\u5747\u503c\n\t\t\tm_imageMean += m_image&#91;rowIndex]&#91;columnIndex];\n\t\t\t\/\/8\u76f8\u90bb\u50cf\u5143\n\t\t\tfor (int i = -1; i &lt;= 1; i++) {\n\t\t\t\tfor (int j = -1; j &lt;= 1; j++) {\n\t\t\t\t\t\/\/\u6392\u9664\u81ea\u8eab\n\t\t\t\t\tif (i == 0 &amp;&amp; j == 0)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tint neighborRow = rowIndex + i;\n\t\t\t\t\tint neighborColumn = columnIndex + j;\n\t\t\t\t\t\/\/\u68c0\u67e5\u662f\u5426\u8303\u56f4\u5185\n\t\t\t\t\tif (neighborRow &lt; 0 || neighborRow >= m_rowNum || neighborColumn &lt; 0 || neighborColumn >= m_columnNum)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\/\/\u68c0\u67e5\u662f\u5426\u4e3a\u6709\u6548\u50cf\u5143\n\t\t\t\t\tif (m_image&#91;neighborRow]&#91;neighborColumn] != m_nodataValue) {\n\t\t\t\t\t\t\/\/\u66f4\u65b0\u6743\u91cd\u77e9\u9635\u548c\n\t\t\t\t\t\tm_weightMatrixSum++;\n\t\t\t\t\t\t\/\/\u5199\u5165\u6743\u91cd\u77e9\u9635\n\t\t\t\t\t\tint weightMatrixI = m_matrixIndex&#91;rowIndex]&#91;columnIndex];\n\t\t\t\t\t\tint weightMatrixJ= m_matrixIndex&#91;neighborRow]&#91;neighborColumn];\n\t\t\t\t\t\tm_weightMatrix&#91;weightMatrixI]&#91;weightMatrixJ] = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\/\/\u8ba1\u7b97\u5e73\u5747\u503c\n\tm_imageMean \/= m_pixelCount;\n}\n\ntemplate&lt;typename T>\ndouble moran&lt;T>::cal_moransI() {\n\t\/\/\u6d4b\u8bd5\u4ee3\u7801\n\t\/\/\u516c\u5f0f\u53f3\u4e0a\u89d2\u7d2f\u52a0\n\tdouble rightup = 0;\n\tfor (int i = 0; i &lt; m_pixelCount; i++) {\n\t\tfor (int j = 0; j &lt; m_pixelCount; j++) {\n\t\t\trightup += m_weightMatrix&#91;i]&#91;j] * (m_valueIndex&#91;i] - m_imageMean) * (m_valueIndex&#91;j] - m_imageMean);\n\t\t}\n\t}\n\t\/\/\u516c\u5f0f\u53f3\u4e0b\u89d2\u7d2f\u52a0\n\tdouble rightdown = 0;\n\tfor (int i = 0; i &lt; m_pixelCount; i++)\n\t\t\trightdown += (m_valueIndex&#91;i] - m_imageMean) * (m_valueIndex&#91;i] - m_imageMean);\n\t\/\/\u8ba1\u7b97\u83ab\u5170\u503c\n\tdouble moransI = 0;\n\tmoransI = m_pixelCount * rightup \/ (m_weightMatrixSum * rightdown);\n\treturn moransI;\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Main\u51fd\u6570\u6d4b\u8bd5<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream>\r\n#include \"GLCM.h\"\r\n#include \"moran.h\"\r\n\r\nint main() {\r\n    const int numRows = 5;\r\n    const int numCols = 5;\r\n    const double minValue = 0.0;\r\n    const double maxValue = 1.0;\r\n    const int levelNum = 8;\r\n    \/\/double testArray1&#91;5]&#91;5] = { {0,0,0,0,0},{0,1,0,1,0}, {0,1,1,0,0}, {0,0,0,0,0}, {0,0,0,0,0} };\r\n\tdouble** testArray = new double*&#91;numRows];\r\n    srand((int)time(0));\r\n    \/\/\u968f\u673a\u8f93\u51650-10\r\n    for (int i = 0; i &lt; numRows; i++) {\r\n        testArray&#91;i] = new double&#91;numCols];\r\n        for (int j = 0; j &lt; numCols; j++) {\r\n            \/\/ \u751f\u6210\u968f\u673a\u503c\u5728minValue\u548cmaxValue\u4e4b\u95f4\r\n            testArray&#91;i]&#91;j] = minValue + (maxValue - minValue) * static_cast&lt;double>(rand()) \/ RAND_MAX;\r\n            \/\/testArray&#91;i]&#91;j] = j>4?1:0;\r\n            \/\/testArray&#91;i]&#91;j] = i % 2;\r\n            \/\/testArray&#91;i]&#91;j] = testArray1&#91;i]&#91;j];\r\n        }\r\n    }\r\n    \/\/\u8bbe\u7f6e\u4fe9\u4e2a\u7a7a\u503c\u8bd5\u8bd5\r\n    \/\/testArray&#91;0]&#91;0] = -999;\r\n    \/\/estArray&#91;3]&#91;4] = -999;\r\n\r\n    \/\/ \u6253\u5370\u751f\u6210\u7684\u4e8c\u7ef4\u6570\u7ec4\r\n    for (int i = 0; i &lt; numRows; i++) {\r\n        for (int j = 0; j &lt; numCols; j++) {\r\n            std::cout &lt;&lt; testArray&#91;i]&#91;j] &lt;&lt; \" \";\r\n        }\r\n        std::cout &lt;&lt; std::endl;\r\n    }\r\n    \/\/\u8c03\u7528GLCM\r\n    GLCM&lt;double> test_GLCM(testArray, numRows, numCols, levelNum, minValue, maxValue);\r\n\r\n    \/\/\u8ba1\u7b97\u6b65\u957f0\uff0c1\u7684GLCM\r\n    test_GLCM.buildGLCM(0, 1, false);\r\n\r\n    \/\/\u8ba1\u7b97\u540c\u8d28\u5ea6\r\n    float homogeneity = test_GLCM.calHom();\r\n    std::cout &lt;&lt; \"\u540c\u8d28\u5ea6\uff1a\" &lt;&lt; homogeneity &lt;&lt; std::endl;\r\n\r\n    \/\/\u8ba1\u7b97\u5bf9\u6bd4\u5ea6\r\n    float contrast = test_GLCM.calCon();\r\n    std::cout &lt;&lt; \"\u5bf9\u6bd4\u5ea6\uff1a\" &lt;&lt; contrast &lt;&lt; std::endl;\r\n\r\n    \/\/\u8ba1\u7b97\u80fd\u91cf\r\n    float Energy = test_GLCM.calEng();\r\n    std::cout &lt;&lt; \"\u80fd\u91cf\uff1a\" &lt;&lt; Energy &lt;&lt; std::endl;\r\n\r\n    \/\/\u8ba1\u7b97\u83ab\u5170\u6307\u6570\r\n    moran&lt;double> test_moran(testArray,numRows,numCols,-9999);\r\n    double moransI = test_moran.cal_moransI();\r\n    std::cout &lt;&lt; \"\u83ab\u5170\u6307\u6570\uff1a\" &lt;&lt; moransI &lt;&lt; std::endl;\r\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>GLCM Moran\u2018s I Main\u51fd\u6570\u6d4b\u8bd5<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1137","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/posts\/1137","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/comments?post=1137"}],"version-history":[{"count":1,"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/posts\/1137\/revisions"}],"predecessor-version":[{"id":1138,"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/posts\/1137\/revisions\/1138"}],"wp:attachment":[{"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/media?parent=1137"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/categories?post=1137"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/tags?post=1137"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}