diff options
Diffstat (limited to 'imagealgos.cpp')
| -rw-r--r-- | imagealgos.cpp | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/imagealgos.cpp b/imagealgos.cpp index 23902d1..e22f1bd 100644 --- a/imagealgos.cpp +++ b/imagealgos.cpp @@ -95,11 +95,11 @@ void rotate(Image &image) using namespace std; - for (size_t i = 0; i < image.height; ++i) + for (size_t i = 0; i < img_height; ++i) { - for (size_t j = 0; j < image.width; ++j) + for (size_t j = 0; j < img_width; ++j) { - image.rotated_cw[j][i] = image.data[image.height - i][j]; + image.rotated_cw[j][i] = image.data[img_height - i][j]; } } @@ -109,12 +109,19 @@ void rotate(Image &image) template<class T, size_t N> constexpr size_t mysize(T (&)[N]) { return N; } +void smooth_column(uint16_t (&column)[]) { + for (size_t i = 1; i < img_height - 1; ++i) { + column[i] = median3(column[i - 1], column[i], column[i + 1]); + } +} + float process_column(uint16_t (&column)[]) { + start_timer(process_column); + float result = std::numeric_limits<float>::quiet_NaN(); - constexpr uint32_t patternSize = 16; // good - constexpr uint32_t signalThreshold = 450; // = SKO * sqrt(patternSize) + constexpr uint32_t signalThreshold = 900; // = SKO * sqrt(patternSize) static constexpr uint32_t patternOffset = patternSize - ((patternSize % 2 == 1) ? 1 : 0); const uint32_t correlationSize = img_height - patternSize + ((patternSize % 2 == 1) ? 1 : 0); @@ -125,13 +132,28 @@ float process_column(uint16_t (&column)[]) int32_t y1 = 0; int32_t y2 = 0; - memset(correlation, 0, img_height * sizeof(uint32_t)); + memset(correlation, 0, img_height * sizeof(correlation[0])); integralSum[0] = 0; for(uint32_t i = 1; i < img_height; ++i) { - if (column[i] < 100) { - column[i] = 1; - } + // if (column[i + 0] < 100) { column[i + 0] = 0; } integralSum[i + 0] = column[i + 0] / 256 + integralSum[i + 0 - 1]; + // if (column[i + 1] < 100) { column[i + 1] = 0; } integralSum[i + 1] = column[i + 1] / 256 + integralSum[i + 1 - 1]; + // if (column[i + 2] < 100) { column[i + 2] = 0; } integralSum[i + 2] = column[i + 2] / 256 + integralSum[i + 2 - 1]; + // if (column[i + 3] < 100) { column[i + 3] = 0; } integralSum[i + 3] = column[i + 3] / 256 + integralSum[i + 3 - 1]; + // if (column[i + 4] < 100) { column[i + 4] = 0; } integralSum[i + 4] = column[i + 4] / 256 + integralSum[i + 4 - 1]; + // if (column[i + 5] < 100) { column[i + 5] = 0; } integralSum[i + 5] = column[i + 5] / 256 + integralSum[i + 5 - 1]; + // if (column[i + 6] < 100) { column[i + 6] = 0; } integralSum[i + 6] = column[i + 6] / 256 + integralSum[i + 6 - 1]; + // if (column[i + 7] < 100) { column[i + 7] = 0; } integralSum[i + 7] = column[i + 7] / 256 + integralSum[i + 7 - 1]; + // if (column[i + 8] < 100) { column[i + 8] = 0; } integralSum[i + 8] = column[i + 8] / 256 + integralSum[i + 8 - 1]; + // if (column[i + 9] < 100) { column[i + 9] = 0; } integralSum[i + 9] = column[i + 9] / 256 + integralSum[i + 9 - 1]; + // if (column[i + 10] < 100) { column[i + 10] = 0; } integralSum[i + 10] = column[i + 10] / 256 + integralSum[i + 10 - 1]; + // if (column[i + 11] < 100) { column[i + 11] = 0; } integralSum[i + 11] = column[i + 11] / 256 + integralSum[i + 11 - 1]; + // if (column[i + 12] < 100) { column[i + 12] = 0; } integralSum[i + 12] = column[i + 12] / 256 + integralSum[i + 12 - 1]; + // if (column[i + 13] < 100) { column[i + 13] = 0; } integralSum[i + 13] = column[i + 13] / 256 + integralSum[i + 13 - 1]; + // if (column[i + 14] < 100) { column[i + 14] = 0; } integralSum[i + 14] = column[i + 14] / 256 + integralSum[i + 14 - 1]; + // if (column[i + 15] < 100) { column[i + 15] = 0; } integralSum[i + 15] = column[i + 15] / 256 + integralSum[i + 15 - 1]; + + if (column[i] < 100) { column[i] = 0; } integralSum[i] = column[i] / 256 + integralSum[i - 1]; } @@ -198,6 +220,8 @@ float process_column(uint16_t (&column)[]) } // std::cout << "result is '" << result << "'\n"; + // stop_timer(process_column); + return result; // center of mass @@ -227,11 +251,12 @@ float process_column(uint16_t (&column)[]) void process_columns(Image &image) { - std::cout << "here\n"; + // std::cout << "here\n"; start_timer(process_columns); for (size_t i = 0; i < image.width; i++) { + // smooth_column(image.rotated_cw[i]); image.pixels[i] = process_column(image.rotated_cw[i]); // Algo genetic(image.rotated_cw[i]); |
