| 98 | } |
| 99 | |
| 100 | void momentsOnImageTest(string pTestFile, string pImageFile, bool isColor) { |
| 101 | IMAGEIO_ENABLED_CHECK(); |
| 102 | vector<dim4> numDims; |
| 103 | |
| 104 | vector<vector<float>> in; |
| 105 | vector<vector<float>> tests; |
| 106 | readTests<float, float, float>(pTestFile, numDims, in, tests); |
| 107 | |
| 108 | array imgArray = loadImage(pImageFile.c_str(), isColor); |
| 109 | |
| 110 | double maxVal = max<double>(imgArray); |
| 111 | double minVal = min<double>(imgArray); |
| 112 | imgArray -= minVal; |
| 113 | imgArray /= maxVal - minVal; |
| 114 | |
| 115 | array momentsArray = moments(imgArray, AF_MOMENT_M00); |
| 116 | |
| 117 | vector<float> mData(momentsArray.elements()); |
| 118 | momentsArray.host(&mData[0]); |
| 119 | for (int i = 0; i < momentsArray.elements(); ++i) { |
| 120 | ASSERT_NEAR(tests[0][i], mData[i], 1e-2 * tests[0][i]) |
| 121 | << "at: " << i << endl; |
| 122 | } |
| 123 | |
| 124 | momentsArray = moments(imgArray, AF_MOMENT_M01); |
| 125 | momentsArray.host(&mData[0]); |
| 126 | for (int i = 0; i < momentsArray.elements(); ++i) { |
| 127 | ASSERT_NEAR(tests[1][i], mData[i], 1e-2 * tests[1][i]) |
| 128 | << "at: " << i << endl; |
| 129 | } |
| 130 | |
| 131 | momentsArray = moments(imgArray, AF_MOMENT_M10); |
| 132 | momentsArray.host(&mData[0]); |
| 133 | for (int i = 0; i < momentsArray.elements(); ++i) { |
| 134 | ASSERT_NEAR(tests[2][i], mData[i], 1e-2 * tests[2][i]) |
| 135 | << "at: " << i << endl; |
| 136 | } |
| 137 | |
| 138 | momentsArray = moments(imgArray, AF_MOMENT_M11); |
| 139 | momentsArray.host(&mData[0]); |
| 140 | for (int i = 0; i < momentsArray.elements(); ++i) { |
| 141 | ASSERT_NEAR(tests[3][i], mData[i], 1e-2 * tests[3][i]) |
| 142 | << "at: " << i << endl; |
| 143 | } |
| 144 | |
| 145 | momentsArray = moments(imgArray, AF_MOMENT_FIRST_ORDER); |
| 146 | mData.resize(momentsArray.elements()); |
| 147 | momentsArray.host(&mData[0]); |
| 148 | for (int i = 0; i < momentsArray.elements() / 4; i += 4) { |
| 149 | ASSERT_NEAR(tests[0][i], mData[i], 1e-2 * tests[0][i]) |
| 150 | << "at: " << i << endl; |
| 151 | ASSERT_NEAR(tests[1][i], mData[i + 1], 1e-2 * tests[1][i]) |
| 152 | << "at: " << i + 1 << endl; |
| 153 | ASSERT_NEAR(tests[2][i], mData[i + 2], 1e-2 * tests[2][i]) |
| 154 | << "at: " << i + 2 << endl; |
| 155 | ASSERT_NEAR(tests[3][i], mData[i + 3], 1e-2 * tests[3][i]) |
| 156 | << "at: " << i + 3 << endl; |
| 157 | } |