summaryrefslogtreecommitdiff
path: root/src/image.cpp
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2025-01-23 12:08:26 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2025-01-23 12:08:26 +0100
commit3fa8f19daf8b36b0703002d78a84e5bb7919849b (patch)
treea82c63aac3b415cb5eddba58ba610213e85f9ae1 /src/image.cpp
parent38acf876313c9bf28e41acd8bc29d6115c1e9285 (diff)
add support of inno-maker ov9281
Diffstat (limited to 'src/image.cpp')
-rw-r--r--src/image.cpp44
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]);
}