기본 콘텐츠로 건너뛰기

2010의 게시물 표시

Data Conversions

Data Conversions By VGirish  | 28 Jun 2002 These are a few samples of data conversions which you can use for a quick reference Introduction Here are a few data conversions with small examples :- Decimal Conversions Decimal To Hex  Collapse // Use _itoa( ) function and set radix to 16. char hexstring[ 10 ]; int number = 30 ; itoa( number, hexstring, 16 ); // In hexstring is 1e. Hex To Decimal  Collapse // You can use strtol function and you can specify base. char * hexstring= " ABCDEF" ; char * p; int number = strtol(hexstring, &p, 16 ); // A function that does this bool HexToDecimal ( char * HexNumber, int& Number) { char * pStopString; Number = strtol (HexNumber, &pStopString, 16 ); return ( bool )(Number != LONG_MAX); } Decimal to time  Collapse char *DecToTime( float fTime, char *szTime) { int nHrs, nMin, nSec; fTime *= 3600 ; nHrs = ( int )fTime / 3600 ; nMin = ( int )(fTime - nHrs * 3600 ) / 60 ; nS

[OpenCV] OpenCV 2.1 Cheat Sheet C++

OpenCV_CheatSheet.pdf [OpenCV] OpenCV 2.1 Cheat Sheet C++

[MATLAB]Polynomial curve fitting - polyfit

polyfit - Polynomial curve fitting Syntax p = polyfit(x,y,n) [p,S] = polyfit(x,y,n) [p,S,mu] = polyfit(x,y,n) Description p = polyfit(x,y,n) finds the coefficients of a polynomial p(x) of degree n that fits the data, p(x(i)) to y(i) , in a least squares sense. The result p is a row vector of length n+1 containing the polynomial coefficients in descending powers: [p,S] = polyfit(x,y,n) returns the polynomial coefficients p and a structure S for use with polyval to obtain error estimates or predictions. Structure S contains fields R , df , and normr , for the triangular factor from a QR decomposition of the Vandermonde matrix of x , the degrees of freedom, and the norm of the residuals, respectively. If the data y are random, an estimate of the covariance matrix of p is (Rinv*Rinv')*normr^2/df , where Rinv is the inverse of R . If the errors in the data y are independent normal with constant variance, polyval produces error bounds that contain at least 50

Pearson 상관계수(sample correlation coefficient)

Pearson 의 상관계수(sample correlation coefficient)는 계산에 가장 편리한 것 중의 하나로, 두 변수 x, y 가 선형관계라면 다음과 같이 계산된다. r 값의 범위 -1 ≤ r ≤ +1 이며, r=1 은 두 변수 사이에 완전한 상관관계에 있는 경우이다. r 값이 0 일 때(xy = 0 일때 생긴다) 두 변수는 완전히 독립이다. 일반적으로 0.90 ≤ r ≤ 0.95 : 보통 0.95 ≤ r ≤ 0.99 : 양호 0.99 ≤ r : 훌륭한 직선성을 나타냄

[MFC]SHBrowseForFolder 폴더를 선택

[code cpp] BROWSEINFO bi; TCHAR szDir[MAX_PATH]; LPITEMIDLIST pidl; LPMALLOC pMalloc; if (SUCCEEDED(SHGetMalloc(&pMalloc))) { ZeroMemory(&bi,sizeof(bi)); bi.hwndOwner = this->m_hWnd; // GetDlgItem(IDC_MYGROUPBOX1)->m_hWnd; // bi.hwndOwner = NULL; bi.pszDisplayName = 0; bi.pidlRoot = 0; bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT; bi.lpfn = NULL;//BrowseCallbackProc; pidl = SHBrowseForFolder(&bi); if (pidl) { if (SHGetPathFromIDList(pidl,szDir)) { GetDlgItem(IDC_EDIT_FOLDER)->SetWindowText(szDir); // MessageBox(szDir,"Picked",MB_OK); } // In C++: pMalloc->Free(pidl); pMalloc->Release(); pMalloc->Free(pidl); pMalloc->Release(); } } [/code]

각도 단위 변환

(1) 각도의 기본 단위 각도를 나타내는 단위입니다. 360분법 으로 표시하는 1도는 사방을 360으로 나눈 크기입니다. 1분은 1도를 60등분한 각이고 1초는 1분을 다시 60등분한 크기입니다. 분(arcminute)과 초(arcsecond)는 시간을 나타내는 단위인 분(minute), 초(second)와 기호가 같은데, 천문학(영어)에서는 둘을 구분하기 위해 각도는 나타내는 단위에는 ' arc- '를 붙여 표기합니다. 각도를 나타내는 다른 방법으로 호도법 이 있습니다. 호도법은 반지름에 대한 호의 길이 단위로 각도를 표시하는 방법으로 사방은 원주율(π)의 2배 크기가 됩니다(360° = 2π rad). 호도법으로 나타낸 각도는 라디안(radian)으로 표시하며, 360분법으로 나타낸 각도를 호도법으로 나타낸 각도로 바꾸어 주려면 360분법으로 나타낸 각도에 π/180을 곱해주면 됩니다. 컴퓨터 프로그램 언어에서 삼각함수를 계산할 때에는 주로 호도법은 쓰고 있습니다. 1도(˚ , degree) : 1˚ = 60′ = 3600″ = π/180 rad 1분(′, arcminute) : 1′ = 60″ = 1/60° 1초(″, arcsecond) : 1″ = 1/60′ = 1/3600° 1라디안(rad, radian) : 1 rad = 180/π° (π = 원주율 = 3.1415926535897932384626433832795) (2) 시간의 기본 단위 시간의 기본단위는 초(second)입니다. 1초는 국제 표준으로 정밀하게 정의되어 있는데, 세슘 원자(세슘-133)가 9,192,631,770번 진동하는 동안의 시간으로 정의되어 있습니다. 본래 1초는 1 평균 태양일의 1/86400로 정의되어 있었지만 지구의 자전 주기는 다소 불규칙하고 느리게 바뀌고 있으므로 균일한 시간을 정의하기에는 부족합니다. 이후 1초는 지구의 공전 주기를 바탕으로 다시 정의 되었다가 지금은 세슘 원자의 특성을 기반으로 새롭게 정의하여

[OpenCV]CvMat의 element 접근법

// 3x3 행렬 생성. element 자료형은 double형에 1 channel CvMat* matrix = cvCreateMat(3, 3, CV_64FC1); double element; // 1번째행 2번째열 데이터 접근하는 법. matrix->data.db[1*3+2] = element; element = matrix->data.db[1*3+2]; 또는 element = cvmGet(matrix, 1, 2); cvmSet(matrix, 1, 2, element); 그렇다면 matrix->data.db[1*3+1]에서 1*3+1에 대해서 알아보자. 일부러 3x3행렬의 중앙에 있는 element를 지정해 놓았다. 그 이유는 1*3+2의 의미를 확실히 외워라는 의미이다. | 1 2 3 | | 4 5 6 | 다음은 3x3 행렬로 각각의 element가 가지는 값을 표시해놓았다. | 7 8 9 | 1*3+1에서 먼저 1이 나타내는 것은 두번째 행(row)임을 나타내는 것이다. 열(column)이 절대 아님. 그렇다면 3이 나타내는 것은 당연히 이 행렬에서 한 행이 가지는 element의 수이다. 다시 말해서 열의 크기를 나타낸다. 마지막으로 1은 열을 나타낸다. 2번째 열에 있다는 이야기이다. 다음의 예를 보자. | 1 2 3 | | 4 5 6 | | 7 8 9 | 3번째 행 1번째 열을 나타내는 식은? 2*3+0 cvmGet이나 cvmSet을 이용하는 것보다 직접 접근하는 것이 편하지만 만약 행과 열을 헷갈린다면 결과는 OTL일 것이다. 신경써서 사용하자. 출처 : http://devnetga.com/blogtt/5?TSSESSIONdevnetgacom=5c8bf4d129f674b65a0766b03f728026   CV_32FC1과 CV_32FC2의 구조를 비교해보자.  CvMat *mat1 = cvCreateMat(2, 3, CV_32F);  CvMat *mat2 = cvCreateMat(1, 3, CV_32FC2);  CvFileStorag

[OpenCV]matrix operations

Matrix-matrix operations: CvMat *Ma, *Mb, *Mc; cvAdd(Ma, Mb, Mc); // Ma+Mb -> Mc cvSub(Ma, Mb, Mc); // Ma-Mb -> Mc cvMatMul(Ma, Mb, Mc); // Ma*Mb -> Mc Elementwise matrix operations: CvMat *Ma, *Mb, *Mc; cvMul(Ma, Mb, Mc); // Ma.*Mb -> Mc cvDiv(Ma, Mb, Mc); // Ma./Mb -> Mc cvAddS(Ma, cvScalar(-10.0), Mc); // Ma.-10 -> Mc Vector products: double va[] = {1, 2, 3}; double vb[] = {0, 0, 1}; double vc[3]; CvMat Va=cvMat(3, 1, CV_64FC1, va); CvMat Vb=cvMat(3, 1, CV_64FC1, vb); CvMat Vc=cvMat(3, 1, CV_64FC1, vc); double res=cvDotProduct(&Va,&Vb); // dot product: Va . Vb -> res cvCrossProduct(&Va, &Vb, &Vc); // cross product: Va x Vb -> Vc end{verbatim} Note that Va, Vb, Vc, must be 3 element vectors in a cross product. Single matrix operations: CvMat *Ma, *Mb; cvTranspose(Ma, Mb); // transpose(Ma) -> Mb (cannot transpose onto self) CvScalar t = cvTrace(Ma); // trace(Ma) -> t.val[0] double d = cvDet(Ma); // det(Ma) -> d cvInvert(Ma, Mb); //

[MATLAB]Circle Fit

  http://www.mathworks.com/matlabcentral/fileexchange/5557-circle-fit

[OpenCV]cvCompareHist - CV_COMP_INTERSECT

[code cpp] double CompareHistogram(IplImage* BufSrc, IplImage* BufRef) {  double dfScore;  int nHistoSize = 256;  float ranges[] = { 0, 256 };  float *hist_range[] = { ranges }; CvHistogram *histSrc = cvCreateHist(1, &nHistoSize, CV_HIST_ARRAY, hist_range);  CvHistogram *histRef = cvCreateHist(1, &nHistoSize, CV_HIST_ARRAY, hist_range);  cvCalcHist(&BufSrc, histSrc, 0, NULL );  cvCalcHist(&BufRef, histRef, 0, NULL );  cvNormalizeHist( histSrc, 100);  cvNormalizeHist( histRef, 100);     // Score = 0.0 ~ 100.0  dfScore = cvCompareHist( histSrc, histRef, CV_COMP_INTERSECT ); return dfScore; } [/code]

[OpenCV]cvDrawContours

cvDrawContours 함수는 contour 를 그려주는 함수이며 thickness 가 0 이상일 경우에는 외곽선만을 그려주고 0 미만일 경우에는 내부를 채워준다 .   원형 void cvDrawContours ( CvArr *img, CvSeq* contour,                                 CvScalar external_color, CvScalar hole_color,                                 int max_level, int thickness=1,                                 int line_type=8, CvPoint offset=cvPoint(0,0) );   패러미터 img contour 를 그릴 IplImage 구조체의 포인터를 넘겨준다 . 다른 그리기 함수와 마찬가지로 contour 는 ROI 로 클리핑된다 . contour CvSeq 구조체의 포인터를 넘겨준다 external_color 외부 contour 의 색상을 설정한다 . hole_color 내부 hole 의 색상을 설정한다 . max_level 그려질 contour 의 최대 단계를 설정한다 . 만약 0 이면 contour 만이 그려질 것이고 1 이면 모든 contour 를 같은 레벨에 그려준다 . 2 이면 다음 레벨까지 그려줄 것이다 . 만약 음수이면 max_level 값에 절대값을 취한 것에서 1 을 뺀 만큼의 자식 contour 를 그려준다 . thickness 라인의 두께를 설정한다 . 만약 음수 (CV_FILLED) 이면 내부를 채운다 . line_type 라인의 그리기 방식을 설정한다 . 8 - 8 방향으로 연결된 라인으로 그린다 . 4 - 4 방향으로 연결된 라인으로 그린다 . CV_AA - 안티앨리어싱을 적용한다 . off