summaryrefslogtreecommitdiff
path: root/imagealgos.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'imagealgos.cpp')
-rw-r--r--imagealgos.cpp45
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]);