Friday, February 04, 2005

Position of window.

-- cvMoveWindow ( const char* name, int x, int y );
cvNamedWindow( "Sth", 1 );
cvMoveWindow("Sth", 500,500); // move window, only works for v4.0

char => -127 < .. < 127, doesn't work
unsigned char => 0 < ... < 255, works
int => -32768 < ... < +32767 works as well
gk_intensity[i*cvsize.width + j] = (uchar)(*(gray_img->imageData + i*cvsize.width + j));
without (uchar), there are some minus values there.

Font, iadd words on the image using "cvPutText", only works with beta3.

Initialize: 1. for iplimage, use cvZero ( IplImage );
2.for multi channel (n) you can use
(image->imageData + image->widthStep*j)[i*n + 0] = 0;
(image->imageData + image->widthStep*j)[i*n + 1] = 0;
(image->imageData + image->widthStep*j)[i*n + 2] = 0;
...

Snake uses "cvSnakeImage" and needs initialize several positions(save in a file with (1)number of points, (2)x y....

// CV_Font2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include<stdio.h>
#include<stdlib.h>
#include<cv.h>
#include<highgui.h>

int main()
{
IplImage* InputImg = NULL;
CvSize winni;
CvPoint* points;
CvPoint* points1;
CvPoint* points2;

CvTermCriteria criteria;
FILE *fp;
float* alpha;
float* beta;
float* gamma;
char Infilename[100], Outfilename[100], InSnakeCoords[100];
int length, x = 1, y = 1, calcGradient = 1, i;

printf("Input filename ? -> ");
scanf("%s", &Infilename);

printf("Output filename ? -> ");
scanf("%s", &Outfilename);

printf("Input Snake Coordinates filename ? -> ");
scanf("%s", &InSnakeCoords);

InputImg = cvLoadImage(Infilename, -1);
if (!InputImg) {
printf("Could not load Input Image");
exit(0);
}

winni.width = 9;
winni.height = 9;

alpha = (float*)malloc(sizeof(float));
beta = (float*)malloc(sizeof(float));
gamma = (float*)malloc(sizeof(float));

*alpha = 1.0; *beta = 1.0; *gamma = 24.0;

fp = fopen(InSnakeCoords, "r");
fscanf(fp, "%d", &length);
printf("%d \n", length);

points = (CvPoint*)malloc(length*sizeof(CvPoint*));
points1 = (CvPoint*)malloc(length*sizeof(CvPoint*));
points2 = (CvPoint*)malloc(length*sizeof(CvPoint*));



i = 1;
while(i <= length)
{
fscanf(fp, "%d", &(points[i].x));
fscanf(fp, "%d", &(points[i].y));
printf("%d %d \n",points[i].x, points[i].y);
i++;
}
fclose(fp);

points[0].x = 0;
points[0].y = 0;
criteria.type = 1;
criteria.maxIter = 1000;

/* for (i = 1; i < length; i++)
{
points1[i].x = points[i].x; points1[i].y = points[i].y;
points2[i].x = points[i+1].x; points2[i].y = points[i+1].y;
cvLine(InputImg, points1[i], points2[i], 0, 1, 1);
}*/

IplImage* gray_img= cvCreateImage(cvGetSize(InputImg), IPL_DEPTH_8U , 1);
cvCvtColor(InputImg, gray_img, CV_RGB2GRAY);

cvSnakeImage(gray_img, points, length, alpha, beta, gamma, CV_VALUE, winni, criteria, calcGradient);



for (i = 1; i < length; i++)
{
points1[i].x = points[i].x; points1[i].y = points[i].y;
points2[i].x = points[i+1].x; points2[i].y = points[i+1].y;
cvLine(gray_img, points1[i], points2[i], 155, 3, 1);
printf("x-> %d y-> %d \n",points[i].x, points[i].y);
}

cvvNamedWindow( "gray22", 1 );
cvvShowImage( "gray22", gray_img );
cvvWaitKey(0);

cvSaveImage(Outfilename, gray_img);

cvReleaseImage(&InputImg);
cvReleaseImage(&gray_img);

free(alpha);
free(beta);
free(gamma);
free(points);
free(points1);
free(points2);

return 1;

}


Canny:


#include<stdio.h>
#include<cv.h>
#include<highgui.h>
#include<stdlib.h>


int main()
{

IplImage* InputImg = NULL;
double LowThreshold;
double HighThreshold;
int ApertureSize;
char Infilename[100], Outfilename[100];

printf("Input Image ? -> ");
scanf("%s", &Infilename);

printf("Output Image ? -> ");
scanf("%s", &Outfilename);

printf("Lower Threshold ? -> ");
scanf("%lf", &LowThreshold);

printf("Higher Threshold ? -> ");
scanf("%lf", &HighThreshold);

printf("Aperture Size ? -> ");
scanf("%d", &ApertureSize);


InputImg = cvLoadImage(Infilename, -1);
if (!InputImg) {
printf("Could not load Input Image");
exit(0);
}

cvCanny(InputImg, InputImg, LowThreshold, HighThreshold, ApertureSize);
cvSaveImage(Outfilename, InputImg);

cvReleaseImage(&InputImg);
}


Hough:


#include<stdio.h>
#include<stdlib.h>
#include<cv.h>
#include<highgui.h>
#include<math.h>

struct Node {
int a;
int b;
int r;
int x;
int y;
int Votes;
int Thresh;
struct Node * next;
};

typedef struct Node XYNODE;

int main()
{
IplImage* InputImg = NULL;
IplImage* source = NULL;
IplImage* HoughCircIMG = NULL;
double LowThreshold;
double HighThreshold;
int ApertureSize = 3, i, j, k;
int Count, a, b, ExY, r, max, n = 0;
int xy[5000][3];
int ***Vote, ***MaxVotes;
int A_PARAM, B_PARAM;
int VThresh;
int Proceed;
float Sum = 0.0;
char Filename[100];

CvPoint* points;
CvPixelPosition8u pos_src1;
unsigned char *ptr_src1;

XYNODE *Store, *Head, *Head2, *AlterStore;

printf("Enter Input Image name\n");
scanf("%s", &Filename);

InputImg = cvLoadImage(Filename, -1);
if (!InputImg) {
printf("Could not load Input Image");
exit(0);
}

printf("Enter Upper Threshold\n");
scanf("%lf", &HighThreshold);

printf("Enter Lower Threshold\n");
scanf("%lf", &LowThreshold);

printf("Enter A Parametrization\n");
scanf("%d", &A_PARAM);

printf("Enter B Parametrization\n");
scanf("%d", &B_PARAM);

printf("Enter Threshold for Image Votes\n");
scanf("%d", &VThresh);

points = (CvPoint*)malloc(50*sizeof(CvPoint*));

cvCanny(InputImg, InputImg, LowThreshold, HighThreshold, ApertureSize);
cvSaveImage("Outimg.pgm", InputImg);

cvReleaseImage(&InputImg);

source = cvLoadImage("Outimg.pgm", -1);
if (!source) {
printf("Could not load Input Image");
exit(0);
}

CV_INIT_PIXEL_POS (pos_src1,
(unsigned char *) source->imageData,source->widthStep,
cvGetSize(source),0,0,source->origin);

Count = 0;
for(i = 0; i < source->width; i++)
{
for(j = 0; j < source->height; j++)
{
ptr_src1 = CV_MOVE_TO(pos_src1, i, j, 1);
if (*ptr_src1 == 255)
{
//printf("%d %d \n ", i, j);
xy[Count][1] = i; xy[Count][2] = j;
Count++;
}
}
}

printf("No. of Edge Pixels-> %d\n", Count);
printf("Width of Image-> %d\n", source->width);
printf("Height of Image-> %d\n", source->height);

Vote=(int ***)malloc((551)*sizeof(int **));
for(i=0; i<551; i++)
Vote[i] = (int **)malloc((551)*sizeof(int *));
for(i=0; i<551; i++)
for(j=0; j<551; j++)
Vote[i][j] = (int *)malloc((551)*sizeof(int));

MaxVotes=(int ***)malloc((551)*sizeof(int **));
for(i=0; i<551; i++)
MaxVotes[i] = (int **)malloc((551)*sizeof(int *));
for(i=0; i<551; i++)
for(j=0; j<551; j++)
MaxVotes[i][j] = (int *)malloc((6)*sizeof(int));


Head = NULL;
int First = 0;
max = 0;
for(ExY = 0; ExY < Count; ExY++)
{
for(a = 0; a < source->width; a = a+A_PARAM)
{
for(b = 0; b < source->height; b = b+B_PARAM)
{
r = (int) roundf((sqrt( (xy[ExY][1]-a)*(xy[ExY][1]-a) + (xy[ExY][2]-b)*(xy[ExY][2]-b))));
//printf("r-> a-> b-> %d %d %d\n", r, a, b);

//r = (int) (r/10);
if (r > max) {max = r;}

Vote[a][b][r]++;

if (Vote[a][b][r] > VThresh) {
Store = (XYNODE *)malloc(sizeof(XYNODE));
Store->a = a;
Store->b = b;
Store->r = r;
Store->x = xy[ExY][1];
Store->y = xy[ExY][2];
Store->Votes = Vote[a][b][r];
Store->next = Head;
Head = Store;
}
}
}
}
Store= Head;

printf("MAX-> %d\n", max);

for (a = 0; a < source->width; a=a+A_PARAM)
{
for (b = 0; b < source->height; b=b+B_PARAM)
{MaxVotes[a][b][1] = 0;MaxVotes[a][b][2] = 0; MaxVotes[a][b][3] = 0; MaxVotes[a][b][4] = 0;}
}


while(Store) {
// printf("a-> %d b-> %d r-> %d x-> %d y-> %d Votes-> %d \n", Store->a, Store->b, Store->r, Store->x, Store->y, Store->Votes);
if (Store->Votes > MaxVotes[Store->a][Store->b][1])
{
MaxVotes[Store->a][Store->b][1] = Store->Votes;
MaxVotes[Store->a][Store->b][2] = Store->r;
MaxVotes[Store->a][Store->b][3] = Store->a;
MaxVotes[Store->a][Store->b][4] = Store->b;
}
Store = Store->next;
}

HoughCircIMG = cvLoadImage(Filename, -1);
if (!HoughCircIMG)
{
printf("Could not Load Input Img");
exit(0);
}

i = 1;
Proceed = 0;
for (a = 0; a < source->width; a=a+A_PARAM)
{
for (b = 0; b < source->height; b=b+B_PARAM)
{
if (MaxVotes[a][b][1] != 0)
{
for (j = -5; j < 5; j++)
{
for (k = -5; k < 5; k++)
{
if (MaxVotes[a+j*A_PARAM][b+k*B_PARAM][1] <= MaxVotes[a][b][1])
{
/* MaxVotes[a][b][1] = MaxVotes[a+j*A_PARAM][b+k*B_PARAM][1];
MaxVotes[a][b][2] = MaxVotes[a+j*A_PARAM][b+k*B_PARAM][2];
MaxVotes[a][b][3] = MaxVotes[a+j*A_PARAM][b+k*B_PARAM][3];
MaxVotes[a][b][4] = MaxVotes[a+j*A_PARAM][b+k*B_PARAM][4];*/
Proceed++;
}
if (MaxVotes[a+j*A_PARAM][b+k*B_PARAM][1] == MaxVotes[a][b][1])
{
MaxVotes[a][b][1] = MaxVotes[a+j*A_PARAM][b+k*B_PARAM][1];
MaxVotes[a][b][2] = MaxVotes[a+j*A_PARAM][b+k*B_PARAM][2];
MaxVotes[a][b][3] = MaxVotes[a+j*A_PARAM][b+k*B_PARAM][3];
MaxVotes[a][b][4] = MaxVotes[a+j*A_PARAM][b+k*B_PARAM][4];
}
}
}

if (Proceed == 100)
{
printf("MaxVotes ->%d ", MaxVotes[a][b][1]);
printf("Radius ->%d ", MaxVotes[a][b][2]);
printf("a ->%d ", MaxVotes[a][b][3]);
printf("b ->%d ", MaxVotes[a][b][4]);

Store = Head;

while(Store)
{
if ((MaxVotes[a][b][2] == Store->r) && (MaxVotes[a][b][3] == Store->a) && (MaxVotes[a][b][4] == Store->b))
{
Sum = Sum + ( (sqrt( (Store->x - MaxVotes[a][b][3])*(Store->x - MaxVotes[a][b][3]) +
(Store->y - MaxVotes[a][b][4])*(Store->y - MaxVotes[a][b][4]) ) - MaxVotes[a][b][2]) *
(sqrt( (Store->x - MaxVotes[a][b][3])*(Store->x - MaxVotes[a][b][3]) +
(Store->y - MaxVotes[a][b][4])*(Store->y - MaxVotes[a][b][4]) ) - MaxVotes[a][b][2]) );
n++;
}
Store = Store->next;
}
printf("Sum -> %f ", Sum); printf("n -> %d ", n);
printf("FITTING ERROR -> %f\n", Sum/n);
Sum = 0.0; n = 0;
points[i].x = MaxVotes[a][b][3];
points[i].y = MaxVotes[a][b][4];
cvCircle(HoughCircIMG, points[i], MaxVotes[a][b][2], 155, 3);
i++;
}
Proceed = 0;
}
}
}

cvSaveImage("HoughCircles.pgm", HoughCircIMG);
cvReleaseImage(&HoughCircIMG);

free(points);
free(Vote);
free(Store);
free(AlterStore);
free(MaxVotes);
}


Camera calibration:


#include<stdio.h>
#include<stdlib.h>
#include<cv.h>
#include<highgui.h>

int main()
{
FILE *fp1, *fp2;
float *x, **a, *b;
float Error = 0.0, TotalError = 0.0;
int m = 40, n = 12, i, j, k=1;
int Xw[50], Yw[50], Zw[50], xi[50], yi[50];
float x_val, y_val, w_val;

x = (float *)malloc((n+1)*sizeof(float));

b = (float *)malloc((m+1)*sizeof(float));

a = (float **)malloc((m+1)*sizeof(float));
for(i=0; i<m+1; i++)
a[i]=(float *)malloc((n+1)*sizeof(float));


fp1 = fopen("3Dcoords.txt", "r");
fp2 = fopen("2Dcoords.txt", "r");

i = 0;
while(1)
{
fscanf(fp1, "%d", &(Xw[i]));
fscanf(fp1, "%d", &(Yw[i]));
fscanf(fp1, "%d", &(Zw[i]));

fscanf(fp2, "%d", &(xi[i]));
fscanf(fp2, "%d", &(yi[i]));

printf(" %d ", Xw[i]);
printf(" %d ", Yw[i]);
printf(" %d ", Zw[i]);
printf(" %d ", xi[i]);
printf(" %d \n", yi[i]);

if ((Xw[i] == 99999)||(xi[i] == 99999)) {break;}
i++;
}

fclose(fp1);
fclose(fp2);

for (i = 1; i < 40; i=i+2)
{
a[i][1] = Xw[i-k]; a[i][2] = Yw[i-k]; a[i][3] = Zw[i-k]; a[i][4] = 1; a[i][5] = 0; a[i][6] = 0; a[i][7] = 0; a[i][8] = 0;
a[i][9] = -(xi[i-k])*Xw[i-k]; a[i][10] = -(xi[i-k])*Yw[i-k]; a[i][11] = -(xi[i-k])*Zw[i-k]; a[i][12] = -(xi[i-k]);

a[i+1][1] = 0; a[i+1][2] = 0; a[i+1][3] = 0; a[i+1][4] = 0; a[i+1][5] = Xw[i-k]; a[i+1][6] = Yw[i-k]; a[i+1][7] = Zw[i-k];
a[i+1][8] = 1; a[i+1][9] = -(yi[i-k])*Xw[i-k]; a[i+1][10] = -(yi[i-k])*Yw[i-k]; a[i+1][11] = -(yi[i-k])*Zw[i-k];
a[i+1][12] = -(yi[i-k]);
k++;
}

b[0] = 0;
for (i = 1; i < 41; i++)
{b[i] = 0;}

solve_system(m,n,a,x,b);
for (i = 1; i < n+1; i++)
{printf(" %f ", x[i]);}

for (i = 0; i < 20; i++)
{
x_val = x[1]*Xw[i] + x[2]*Yw[i] + x[3]*Zw[i] + x[4];
y_val = x[5]*Xw[i] + x[6]*Yw[i] + x[7]*Zw[i] + x[8];
w_val = x[9]*Xw[i] + x[10]*Yw[i] + x[11]*Zw[i] + x[12];
x_val = x_val/w_val;
y_val = y_val/w_val;
printf("\n Calc x-> %f", x_val);
printf(" Calc y-> %f", y_val);
printf(" x-> %d", xi[i]);
printf(" y-> %d\n", yi[i]);

Error = sqrt((xi[i]-x_val)*(xi[i]-x_val) + (yi[i]-y_val)*(yi[i]-y_val));
TotalError += Error;
printf(" ERROR -> %f", Error);
printf(" w_val-> %f \n", w_val);
}
TotalError = TotalError/20.0;
printf("\nACCURACY TEST TOTAL ERROR -> %f\n", TotalError);


fp1 = fopen("New3Dcoords.txt", "r");
fp2 = fopen("New2Dcoords.txt", "r");

i = 0;
while(1)
{
fscanf(fp1, "%d", &(Xw[i]));
fscanf(fp1, "%d", &(Yw[i]));
fscanf(fp1, "%d", &(Zw[i]));

fscanf(fp2, "%d", &(xi[i]));
fscanf(fp2, "%d", &(yi[i]));

printf(" %d ", Xw[i]);
printf(" %d ", Yw[i]);
printf(" %d ", Zw[i]);
printf(" %d ", xi[i]);
printf(" %d \n", yi[i]);

if ((Xw[i] == 99999)||(xi[i] == 99999)) {break;}
i++;
}

fclose(fp1);
fclose(fp2);

Error = 0.0; TotalError = 0.0;
for (i = 0; i < 6; i++)
{
x_val = x[1]*Xw[i] + x[2]*Yw[i] + x[3]*Zw[i] + x[4];
y_val = x[5]*Xw[i] + x[6]*Yw[i] + x[7]*Zw[i] + x[8];
w_val = x[9]*Xw[i] + x[10]*Yw[i] + x[11]*Zw[i] + x[12];
x_val = x_val/w_val;
y_val = y_val/w_val;
printf("\n Calc x-> %f", x_val);
printf(" Calc y-> %f", y_val);
printf(" x-> %d", xi[i]);
printf(" y-> %d\n", yi[i]);

Error = sqrt((xi[i]-x_val)*(xi[i]-x_val) + (yi[i]-y_val)*(yi[i]-y_val));
TotalError += Error;
printf(" ERROR -> %f", Error);
printf(" w_val-> %f \n", w_val);
}
TotalError = TotalError/6.0;
printf("\nPROJECTION TEST TOTAL ERROR -> %f\n", TotalError);
}


Calibration using Projected Matrix:


#include<stdio.h>
#include<stdlib.h>
#include<cv.h>
#include<highgui.h>
#include<math.h>


int main()
{
FILE *fp1, *fp2;
float no;
int i = 0, j = 0, k, loop, RotNum = 0, TransNum = 0, p;
double RotObject[5], TransRotObject[5], xy[4];
int ChangeXY = 1, Vnew = -1;
int numImages;
int numPoints[15] = {90,90,90,90,90,90,90,90,90,90,90,90,90,90,90};
int useIntrinsicGuess = 0;
double Accuracy = 0.0, TotalAccuracy = 0.0;
CvSize imageSize;
CvPoint2D64d* imagePoints, *Copy_imagePoints;
CvPoint3D64d* objectPoints, *Copy_objectPoints;
double distortion[4];
double cameraMatrix[9];
double transVects[3*15];
double rotMatrs[9*15];
char *filename1, *filename2;
numImages = 15;

imagePoints = (CvPoint2D64d*)malloc(1450*sizeof(CvPoint2D64d));
objectPoints = (CvPoint3D64d*)malloc(1450*sizeof(CvPoint3D64d));
Copy_imagePoints = (CvPoint2D64d*)malloc(1400*sizeof(CvPoint2D64d));
Copy_objectPoints = (CvPoint3D64d*)malloc(1400*sizeof(CvPoint3D64d));

//distortion = (CvVect64d)malloc(10*sizeof(CvVect64d));
//transVects = (CvVect64d)malloc(10*sizeof(CvVect64d));
//cameraMatrix = (CvMatr64d)malloc(10*sizeof(CvMatr64d));
//rotMatrs = (CvMatr64d)malloc(10*sizeof(CvMatr64d));


imageSize.width = 640;
imageSize.height = 480;

for (loop = 1; loop < 16; loop++)
{
if (loop == 1) {filename1 = "pixel01.txt"; filename2 = "world01.txt";}
if (loop == 2) {filename1 = "pixel02.txt"; filename2 = "world02.txt";}
if (loop == 3) {filename1 = "pixel03.txt"; filename2 = "world03.txt";}
if (loop == 4) {filename1 = "pixel04.txt"; filename2 = "world04.txt";}
if (loop == 5) {filename1 = "pixel05.txt"; filename2 = "world05.txt";}
if (loop == 6) {filename1 = "pixel06.txt"; filename2 = "world06.txt";}
if (loop == 7) {filename1 = "pixel07.txt"; filename2 = "world07.txt";}
if (loop == 8) {filename1 = "pixel08.txt"; filename2 = "world08.txt";}
if (loop == 9) {filename1 = "pixel09.txt"; filename2 = "world09.txt";}
if (loop == 10) {filename1 = "pixel10.txt"; filename2 = "world10.txt";}
if (loop == 11) {filename1 = "pixel11.txt"; filename2 = "world11.txt";}
if (loop == 12) {filename1 = "pixel12.txt"; filename2 = "world12.txt";}
if (loop == 13) {filename1 = "pixel13.txt"; filename2 = "world13.txt";}
if (loop == 14) {filename1 = "pixel14.txt"; filename2 = "world14.txt";}
if (loop == 15) {filename1 = "pixel15.txt"; filename2 = "world15.txt";}

ChangeXY = 1;
fp1 = fopen(filename1, "r");
printf("filename1 -> %s\n", filename1);

while(1)
{
fscanf(fp1, "%f\n", &(no));
if (no == 99999) {break;}

ChangeXY = 1 - ChangeXY;
if (ChangeXY == 0) {imagePoints[i].x = no; printf("%f\n", imagePoints[i].x);}
if (ChangeXY == 1) {imagePoints[i].y = no; printf("%f\n", imagePoints[i].y); i++;}

//printf("%f\n", no);
}
printf("i -> %d\n", i);
fclose(fp1);

ChangeXY = 1;
fp2 = fopen(filename2, "r");
printf("filename2 -> %s\n", filename2);

while(1)
{
fscanf(fp2, "%f\n", &(no));
if (no == 99999) {break;}

ChangeXY = 1 - ChangeXY;
if (ChangeXY == 0) {objectPoints[j].x = no; printf("%f\n", objectPoints[j].x);}
if (ChangeXY == 1) {objectPoints[j].y = no; printf("%f\n", objectPoints[j].y); objectPoints[j].z = 0.0; j++;}

//printf("%f\n", no);
}
printf("j-> %d\n", j);
fclose(fp2);

}

for (k = 0; k < 1350; k++)
{
if ((k % 90 == 0) && (k != 0))
{Vnew = Vnew+7;}
else {Vnew++;}

Copy_imagePoints[k].x = imagePoints[Vnew].x; Copy_imagePoints[k].y = imagePoints[Vnew].y;
Copy_objectPoints[k].x = objectPoints[Vnew].x; Copy_objectPoints[k].y = objectPoints[Vnew].y; Copy_objectPoints[k].z = 0.0;
printf("k -> %d Vnew -> %d\n", k , Vnew);
}

printf("CAME OUT\n");
cvCalibrateCamera_64d(numImages, numPoints, imageSize, Copy_imagePoints,
Copy_objectPoints, distortion, cameraMatrix,
transVects, rotMatrs, useIntrinsicGuess);

printf("\nDistortion Matrix\n");
for (k = 0; k < 4; k++)
{
printf(" %lf ", distortion[k]);
}

printf("\nCamera Matrix \n");
for (k = 0; k < 9; k++)
{
printf(" %lf ", cameraMatrix[k]);
}

printf("\nTranslation Vectors \n");
for (k = 0; k < 45; k++)
{
printf(" %lf ", transVects[k]);
}

printf("\nRotation Vectors \n");
for (k = 0; k < 135; k++)
{
printf(" %lf ", rotMatrs[k]);
}

for (k = 0; k < 1350; k++)
{
if ((k%90 == 0)&&(k!=0))
{RotNum = RotNum+9; TransNum = TransNum+3;}


RotObject[0] = rotMatrs[RotNum] * Copy_objectPoints[k].x +
rotMatrs[RotNum+1] * Copy_objectPoints[k].y +
rotMatrs[RotNum+2] * Copy_objectPoints[k].z;

RotObject[1] = rotMatrs[RotNum+3] * Copy_objectPoints[k].x +
rotMatrs[RotNum+4] * Copy_objectPoints[k].y +
rotMatrs[RotNum+5] * Copy_objectPoints[k].z;

RotObject[2] = rotMatrs[RotNum+6] * Copy_objectPoints[k].x +
rotMatrs[RotNum+7] * Copy_objectPoints[k].y +
rotMatrs[RotNum+8] * Copy_objectPoints[k].z;

TransRotObject[0] = RotObject[0] + transVects[TransNum];
TransRotObject[1] = RotObject[1] + transVects[TransNum+1];
TransRotObject[2] = RotObject[2] + transVects[TransNum+2];

xy[1] = cameraMatrix[0] * TransRotObject[0] + cameraMatrix[1] * TransRotObject[1] + cameraMatrix[2] * TransRotObject[2];
xy[2] = cameraMatrix[3] * TransRotObject[0] + cameraMatrix[4] * TransRotObject[1] + cameraMatrix[5] * TransRotObject[2];
xy[3] = cameraMatrix[6] * TransRotObject[0] + cameraMatrix[7] * TransRotObject[1] + cameraMatrix[8] * TransRotObject[2];

xy[1] = xy[1] / xy[3];
xy[2] = xy[2] / xy[3];

//printf("\n %f ", xy[1]);
//printf(" %f ", xy[2]);
//printf(" %f ", Copy_imagePoints[k].x);
//printf(" %f ", Copy_imagePoints[k].y);

Accuracy += sqrt ( (xy[1] - Copy_imagePoints[k].x) * (xy[1] - Copy_imagePoints[k].x) +
(xy[2] - Copy_imagePoints[k].y) * (xy[2] - Copy_imagePoints[k].y) );

if ((k % 90 == 0)&&(k!=0))
{
Accuracy = Accuracy / 90.0;
TotalAccuracy += Accuracy;
printf("\nAccuracy -> %lf\n", Accuracy);
Accuracy = 0.0;
}

RotObject[0] = 0.0; RotObject[1] = 0.0; RotObject[2] = 0.0;
TransRotObject[0] = 0.0; TransRotObject[1] = 0.0; TransRotObject[2] = 0.0;
}

printf("\nTotalAccuracy -> %lf\n", TotalAccuracy/15);

RotNum = 0; TransNum = 0; TotalAccuracy = 0.0; Accuracy = 0.0;
for (p = 0; p < 1440; p = p + 90)
{
if ((p+90+6) > 1440) break;
for (k = p+90; k < p+90+6; k++)
{
RotObject[0] = rotMatrs[RotNum] * objectPoints[k].x +
rotMatrs[RotNum+1] * objectPoints[k].y +
rotMatrs[RotNum+2] * objectPoints[k].z;

RotObject[1] = rotMatrs[RotNum+3] * objectPoints[k].x +
rotMatrs[RotNum+4] * objectPoints[k].y +
rotMatrs[RotNum+5] * objectPoints[k].z;

RotObject[2] = rotMatrs[RotNum+6] * objectPoints[k].x +
rotMatrs[RotNum+7] * objectPoints[k].y +
rotMatrs[RotNum+8] * objectPoints[k].z;

TransRotObject[0] = RotObject[0] + transVects[TransNum];
TransRotObject[1] = RotObject[1] + transVects[TransNum+1];
TransRotObject[2] = RotObject[2] + transVects[TransNum+2];

xy[1] = cameraMatrix[0] * TransRotObject[0] + cameraMatrix[1] * TransRotObject[1] + cameraMatrix[2] * TransRotObject[2];
xy[2] = cameraMatrix[3] * TransRotObject[0] + cameraMatrix[4] * TransRotObject[1] + cameraMatrix[5] * TransRotObject[2];
xy[3] = cameraMatrix[6] * TransRotObject[0] + cameraMatrix[7] * TransRotObject[1] + cameraMatrix[8] * TransRotObject[2];

xy[1] = xy[1] / xy[3];
xy[2] = xy[2] / xy[3];

printf("\n %f ", xy[1]);
printf(" %f ", xy[2]);
printf(" %f ", imagePoints[k].x);
printf(" %f ", imagePoints[k].y);

Accuracy += sqrt ( (xy[1] - imagePoints[k].x) * (xy[1] - imagePoints[k].x) +
(xy[2] - imagePoints[k].y) * (xy[2] - imagePoints[k].y) );


RotObject[0] = 0.0; RotObject[1] = 0.0; RotObject[2] = 0.0;
TransRotObject[0] = 0.0; TransRotObject[1] = 0.0; TransRotObject[2] = 0.0;
}
RotNum = RotNum + 9; TransNum = TransNum + 3;
Accuracy = Accuracy / 6.0;
TotalAccuracy += Accuracy;
printf("\n Accuracy -> %lf\n", Accuracy);
Accuracy = 0.0;
}

printf("\nProjection Test -> %lf\n", TotalAccuracy/15);

free(imagePoints);
free(objectPoints);
free(Copy_imagePoints);
free(Copy_objectPoints);
}


Resize:


// temp.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <cv.h>
#include <highgui.h>

int _tmain(int argc, _TCHAR* argv[])
{
IplImage *src, *dst;
CvSize newsize;

src = cvLoadImage("m.jpg");
newsize.width = src->width*4;
newsize.height = src->height*4;

dst = cvCreateImage(newsize, IPL_DEPTH_8U, 3);
cvResize(src, dst, CV_INTER_LINEAR);

cvNamedWindow("wndname", -1);
cvShowImage("wndname", dst);

cvWaitKey(0);
return 0;
}



cvNameWindow("..",-1); "-1"(except 0)window size is automatically adjusted to fit the displayed image, while user can not change the window size manually., "0" not.


cvDestroyAllWindows(voit)


cvWaitKey( int delay ) delay in milliseconds. If delay<=0, infinite



IplImage* cvLoadImage( const char* filename, int iscolor);


iscolor Specifies colorness of the loaded image:


if >0, the loaded image is forced to be color 3-channel image;


if =0, the loaded image is forced to be grayscale;


if <0, the loaded image will be loaded as is (with number of channels depends on the file).


(22632-23000)

No comments:

Post a Comment