From dba94c125e63e635f266796c1632b6b56ff76066 Mon Sep 17 00:00:00 2001 From: Mark Hoekveen Date: Sat, 30 Jun 2018 14:31:46 +0200 Subject: [PATCH] Code-cleanup Some refactoring was in order. --- Descriptor.h | 55 ++++++---------------------------------------------- 1 file changed, 6 insertions(+), 49 deletions(-) diff --git a/Descriptor.h b/Descriptor.h index 44e0012..5dd8cb2 100644 --- a/Descriptor.h +++ b/Descriptor.h @@ -32,6 +32,8 @@ public: return true; } + //Helper functions + //TODO: Move these somewhere else. Maybe a friend-class? double* CalculateDCT(Image* img) { double pi = 3.14159265359; img->type(GrayscaleType); @@ -60,26 +62,21 @@ public: for (ssize_t x = 0; x < m; x++) { for (ssize_t y = 0; y < n; y++) { int n = (x*m) + y; - double pixel = ((double)p_s[0] / QuantumRange); //rescaled from 0 to 1 - //cout << "pixel: " << pixel << endl; + double pixel = ((double)p_s[0] / QuantumRange); //rescaled to [0..1] sum += pixel * std::cos((pi / N)*(n + 0.5)*k); p_s = p_s + chan; } } q[0] = sum; - /*if (p[0] != 0) - retval |= bitset<64>(1); //XOR - retval <<= 1;*/ q = q++; p = p + chan; - } } for (int i = 0; i < 64; i++) { c[0] = converted[i] * 255.0; c++; } - newimg->write("Out.png"); + //newimg->write("Out.png"); //for debugging purposes return converted; } }; @@ -340,55 +337,17 @@ public: class DCTPearson: public Descriptor { public: bitset<64> feature(Image* img) { - img->type(GrayscaleType); - img->filterType(LanczosFilter); //fast! - img->resize(Geometry(8, 8)); //64 pixels - ssize_t n = 8; - ssize_t m = 8; - Pixels view(*img); - int numpixels = (int)(n*m); - int chan = (int)img->channels(); //should be 1, just intensity - const Quantum *p = view.getConst(0, 0, n, m); //entire image - bitset<64> retval(0); - int N = n*m; - /*Image* converted = new Image(Geometry(n, m), Color("white")); - Pixels conview(*converted); - const Quantum *q = conview.getConst(0, 0, n, m); //entire converted image*/ - double* converted = CalculateDCT(img); - /*double* q = converted; - for (ssize_t j = 0; j < m; j++) { - for (ssize_t i = 0; i < n; i++) { - double sum = 0; - int k = (j*m) + i; - const Quantum *p_s = view.getConst(0, 0, n, m); //entire image - for (ssize_t x = 0; x < m; x++) { - for (ssize_t y = 0; y < n; y++) { - int n = (x*m) + y; - double pixel = ((double)p_s[0] / QuantumRange); //rescaled from 0 to 1 - //cout << "pixel: " << pixel << endl; - sum += pixel * std::cos((pi/N)*(n+0.5)*k); - p_s = p_s + chan; - } - } - q[0] = sum; - q = q++; - p = p + chan; - } - //cout << endl; - }*/ double prev = 0; + bitset<64> retval(0); for (int i = 0; i < 64; i++) { if (converted[i] > prev) { retval |= bitset<64>(1); //XOR - //cout << "1"; } - //else cout << "0"; retval <<= 1; prev = converted[i]; } - //cout << "----" << endl << endl; return retval; } unsigned long long distance(bitset<64> a, bitset<64> b) { @@ -399,8 +358,6 @@ public: return biterror; }; string ToString() { - return "Discrete Cosine Transform"; + return "Discrete Cosine Transform - Pearson Code"; } -private: - double pi = 3.14159265359; }; \ No newline at end of file