diff options
| author | Nikita Kostovsky <nikita@kostovsky.me> | 2025-01-23 12:08:26 +0100 |
|---|---|---|
| committer | Nikita Kostovsky <nikita@kostovsky.me> | 2025-01-23 12:08:26 +0100 |
| commit | 3fa8f19daf8b36b0703002d78a84e5bb7919849b (patch) | |
| tree | a82c63aac3b415cb5eddba58ba610213e85f9ae1 /src/image.cpp | |
| parent | 38acf876313c9bf28e41acd8bc29d6115c1e9285 (diff) | |
add support of inno-maker ov9281
Diffstat (limited to 'src/image.cpp')
| -rw-r--r-- | src/image.cpp | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/src/image.cpp b/src/image.cpp index 7d1c824..ce814da 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -1,11 +1,20 @@ #include "image.h" +#include <QElapsedTimer> + #include "macro.h" #include "pixels.h" -float process_column(const uint16_t (&column)[]) +uint64_t sum_elapsed_ns = 0; +uint64_t corr_elapsed_ns = 0; +uint64_t max_elapsed_ns = 0; +uint64_t value_elapsed_ns = 0; + +float process_column(const uint8_t (&column)[]) { start_timer(process_column); + QElapsedTimer t; + t.start(); float result = std::numeric_limits<float>::quiet_NaN(); @@ -24,23 +33,20 @@ float process_column(const uint16_t (&column)[]) 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] = 0; - // } - - integralSum[i] = column[i] / 256 + integralSum[i - 1]; + for (uint32_t i = 1; i < img_height; ++i) { + integralSum[i] = column[i] + integralSum[i - 1]; } + sum_elapsed_ns += t.nsecsElapsed(); + t.restart(); for (uint32_t i = 0; i < correlationSize; ++i) - correlation[i + patternSize / 2] = column[i + patternSize / 2] / 256 * - (integralSum[i + patternOffset] - - integralSum[i]); + correlation[i + patternSize / 2] = column[i + patternSize / 2] + * (integralSum[i + patternOffset] - integralSum[i]); - for (uint32_t i = 3; i < img_height - 2; ++i) - { + corr_elapsed_ns += t.nsecsElapsed(); + t.restart(); + + for (uint32_t i = 3; i < img_height - 2; ++i) { const auto sum = correlation[i - 1] + correlation[i] + correlation[i + 1]; @@ -69,6 +75,9 @@ float process_column(const uint16_t (&column)[]) } } + value_elapsed_ns += t.nsecsElapsed(); + t.restart(); + result = (y2 != y1) ? (float(x1) - (float(y1) / (y2 - y1))) : std::numeric_limits<float>::quiet_NaN(); @@ -81,6 +90,8 @@ void Image::rotate() using namespace std; +#pragma omp parallel +#pragma omp for for (size_t i = 0; i < img_height; ++i) { for (size_t j = 0; j < img_width; ++j) @@ -99,8 +110,9 @@ std::shared_ptr<Pixels> Image::pixels() const start_timer(process_columns); - for (size_t i = 0; i < width; i++) - { +#pragma omp chunk +#pragma omp parallel for + for (size_t i = 0; i < img_width; i++) { result->pixels[i] = process_column(rotated_cw[i]); } |
