|
From: Gustavo P. B. <gb...@us...> - 2005-06-19 02:02:55
|
Update of /cvsroot/kimageprocess/kimageprocess/src/methods/hsvcm In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6902 Modified Files: hsvcm.cpp Log Message: - Added code to be able to test with distance > 1 Index: hsvcm.cpp =================================================================== RCS file: /cvsroot/kimageprocess/kimageprocess/src/methods/hsvcm/hsvcm.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- hsvcm.cpp 2 Jun 2005 02:09:16 -0000 1.9 +++ hsvcm.cpp 19 Jun 2005 02:02:43 -0000 1.10 @@ -113,15 +113,15 @@ } //delete the GLCM's after calculating - for (int d=0; d < 9; d++) + for (int dir=0; dir < 9; dir++) { for (int i=0;i < m_sizeV; i++) { for (int j=0;j < m_sizeH; j++) - delete [] m_cm[d][i][j]; - delete [] m_cm[d][i]; + delete [] m_cm[dir][i][j]; + delete [] m_cm[dir][i]; } - delete m_cm[d]; + delete m_cm[dir]; } } @@ -130,15 +130,16 @@ QColor color; //initialize the matrices with zeros - for (int d=0; d < 9; d++) + for (int dir=0; dir < 9; dir++) for (int i=0; i < m_sizeV; i++) for (int j=0; j < m_sizeH; j++) for (int k=0; k < m_sizeS; k++) - m_cm[d][i][j][k] = 0; + m_cm[dir][i][j][k] = 0; int width = m_img->width(); int height = m_img->height(); - + int d = 1; // distance between pixels + // Convert all RGB to HSV struct s_hsv { @@ -161,10 +162,10 @@ for (int y = 0; y < height; ++y) { //nine directions - for (int d = 0; d < 9; d++) + for (int dir = 0; dir < 9; dir++) { int xs,ys,xv,yv; - switch (d) + switch (dir) { case 0: /** @@ -183,11 +184,11 @@ * / * V */ - xv = (x == 0 ? width-1 : x-1); - yv = (y == height-1 ? 0 : y+1); + xv = (x-d < 0 ? width-d : x-d); + yv = (y+d >= height ? d-1 : y+d); - xs = (x == width-1 ? 0 : x+1); - ys = (y == 0 ? height-1 : y-1); + xs = (x+d >= width ? d-1 : x+d); + ys = (y-d < 0 ? height-d : y-d); break; case 2: /** @@ -198,8 +199,8 @@ * V */ xs = xv = x; - yv = (y == height-1 ? 0 : y+1); - ys = (y == 0 ? height-1 : y-1); + yv = (y+d >= height ? d-1 : y+d); + ys = (y-d < 0 ? height-d : y-d); break; case 3: /** @@ -209,11 +210,11 @@ * \ * V */ - xv = (x == width-1 ? 0 : x+1); - yv = (y == height-1 ? 0 : y+1); + xv = (x+d >= width ? d-1 : x+d); + yv = (y+d >= height ? d-1 : y+d); - xs = (x == 0 ? width-1 : x-1); - ys = (y == 0 ? height-1 : y-1); + xs = (x-d < 0 ? width-d : x-d); + ys = (y-d < 0 ? height-d : y-d); break; case 4: /** @@ -222,8 +223,8 @@ * */ yv = ys = y; - xv = (x == width-1 ? 0 : x+1); - xs = (x == 0 ? width-1 : x-1); + xv = (x+d >= width ? d-1 : x+d); + xs = (x-d < 0 ? width-d : x-d); break; case 5: /** @@ -233,11 +234,11 @@ * / * S */ - xv = (x == width-1 ? 0 : x+1); - yv = (y == 0 ? height-1 : y-1); + xv = (x+d >= width ? d-1 : x+d); + yv = (y-d < 0 ? height-d : y-d); - xs = (x == 0 ? width-1 : x-1); - ys = (y == height-1 ? 0 : y+1); + xs = (x-d < 0 ? width-d : x-d); + ys = (y+d >= height ? d-1 : y+d); break; case 6: /** @@ -248,8 +249,8 @@ * S */ xs = xv = x; - yv = (y == 0 ? height-1 : y-1); - ys = (y == height-1 ? 0 : y+1); + yv = (y-d < 0 ? height-d : y-d); + ys = (y+d >= height ? d-1 : y+d); break; case 7: /** @@ -259,11 +260,11 @@ * \ * S */ - xv = (x == 0 ? width-1 : x-1); - yv = (y == 0 ? height-1 : y-1); + xv = (x-d < 0 ? width-d : x-d); + yv = (y-d < 0 ? height-d : y-d); - xs = (x == width-1 ? 0 : x+1); - ys = (y == height-1 ? 0 : y+1); + xs = (x+d >= width ? d-1 : x+d); + ys = (y+d >= height ? d-1 : y+d); break; case 8: /** @@ -272,11 +273,12 @@ * */ yv = ys = y; - xv = (x == 0 ? width-1 : x-1); - xs = (x == width-1 ? 0 : x+1); + xv = (x-d < 0 ? width-d : x-d); + xs = (x+d >= width ? d-1 : x+d); break; } - m_cm[d][hsv[xv][yv].V][hsv[x][y].H][hsv[xs][ys].S]++; + //explaining m_cm[ direction, V, H, S ] ++; + m_cm[dir][hsv[xv][yv].V][hsv[x][y].H][hsv[xs][ys].S]++; } } @@ -284,11 +286,11 @@ float max = width * height; // Normalize the matrices //kdDebug() << "Normalizing the matrices..." << endl; - for (int d=0; d < 9; d++) + for (int dir=0; dir < 9; dir++) for (int i=0; i < m_sizeV; i++) for (int j=0; j < m_sizeH; j++) for (int k=0; k < m_sizeS; k++) - m_cm[d][i][j][k] /= max; + m_cm[dir][i][j][k] /= max; } @@ -296,6 +298,7 @@ { return m_cm[direction]; } + int KTHSVCM::dataSize(int index) { switch (index) |