프로그래밍(C++,Matlab)을 이용한 영상좌표변환
본 자료는 5페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
해당 자료는 5페이지 까지만 미리보기를 제공합니다.
5페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

1.실습과정
2. 실습결과
□ C++ Coding

본문내용

16
-0.009
3
0.015
0.007
4
-0.019
-0.013
5
0.004
-0.018
6
-0.002
0.019
7
0
-0.015
8
0.008
0.0235
<오차 분석>
#include //헤더파일 선언
using namespace std;
double X=0,Y=0; // 변수선언부분
double X_=0,Y_=0;
double x[6][1]={0};
double A[16][6]={11528,10723,1,0,0,0,
0,0,0,11528,10723,1,
1436,10677,1,0,0,0,
0,0,0,1436,10677,1,
1491,582,1,0,0,0,
0,0,0,1491,582,1,
11586,626,1,0,0,0,
0,0,0,11586,626,1,
6480,10985,1,0,0,0,
0,0,0,6480,10985,1,
1178,5629,1,0,0,0,
0,0,0,1178, 5629,1,
6540,318,1,0,0,0,
0,0,0,6540,318,1,
11842,5677,1,0,0,0,
0,0,0,11842,5677,1};
double L[16][1]={105.999,-105.998 ,
-105.997,-105.998 ,
-105.997,105.996 ,
106.003,106.003 ,
0.000,-111.999 ,
-111.995,0.003 ,
0.003,111.993 ,
112.000,0.004 };
double B[6][16];
double C[6][16];
double res[6][6]={0};
double E[6][6]={0};
void trans(double A[16][6],double B[6][16]); // 함수선언부분
void makeE(double E[6][6]);
void Eliment(double res[][6],double E[][6],int size);
void Makeone(double res[][6],double E[][6],int size);
void Cal(double res[][6],double E[][6],int size);
void multi(double result[6][6], double A[16][6], double B[6][16]);
void multi2(double x[6][1], double B[6][16],double L[16][1],double C[6][16]);
void main() // 메인함수
{
trans(A,B);
multi(res, A, B);
makeE(E);
Eliment(res,E,6);
Makeone(res,E,6);
Cal(res,E,6);
cout<<" x ="< multi2(x,B,L,C);
cout< cin>>X;
cout< cin>>Y;
X_=X*x[0][0]+Y*x[1][0]+x[2][0];
Y_=X*x[3][0]+Y*x[4][0]+x[5][0];
cout<<"X="< }
void trans(double A[16][6],double B[6][16]){ // 행렬 트랜스를 위한 함수
for (int i=0;i<16;++i){
for (int j=0;j<6;++j){
B[j][i] = A[i][j];
}
}
}
void makeE(double E[6][6]){
for (int i=0;i<6;++i ){ // 단위 행렬 만들기
for (int j = 0; j < 6; ++j ){
if(i==j)
E[j][i]=1;
}
}
}
void multi(double result[6][6], double A[16][6], double B[6][16]) // 행렬 곱셈을 위한 함수 (A'*A)
{
int i, j, k;
for(j=0;j<6;j++)
for(k=0;k<6;k++){
result[j][k]=0;
for(i=0;i<16;i++)
res[j][k] += B[j][i] * A[i][k];
}
}
void Eliment(double res[][6],double E[][6],int size) // 가우스 조단 실행함수 (아래 0만들기)
{
double factor=0;
for(int k=0;k<=4;k++){
for(int i=k+1;i<=5;i++){
factor=res[i][k]/res[k][k];
for(int j=0;j<=5;j++){
res[i][j]-=factor* res[k][j];
E[i][j]-=factor*E[k][j];
}
}
}
}
void Makeone(double res[][6],double E[][6],int size) // 가우스 조단 실행함수 (가운데 1만들기)
{
for(int i=0;i<=5;i++){
double factor=1;
factor*=1/res[i][i];
for(int k=0;k<=5;k++){
res[i][k]*=factor;
E[i][k]*=factor;
}
}
}
void Cal(double res[][6],double E[][6],int size) // 가우스 조단 실행함수 (위쪽 0만들기)
{
double factor=0;
for(int i=5;i>0;i--){
for(int j=i-1;j>=0;j--){
factor=res[j][i];
res[j][i]-=factor*res[i][i];
for(int k=0;k<=5;k++)
E[j][k]-=factor*E[i][k];
}
}
}
void multi2(double x[6][1], double B[6][16],double L[16][1],double C[6][16])
{// 행렬의 곱셈을 위한 함수 invA*A'*L
int i, j, k;
for(j=0;j<6;j++)
for(k=0;k<16;k++){
for(i=0;i<6;i++)
C[j][k] += E[j][i] * B[i][k];
}
for(j=0;j<6;j++)
for(k=0;k<1;k++){
for(i=0;i<16;i++)
x[j][k] += C[j][i] * L[i][k];
cout<<" "< }
cout< }

키워드

  • 가격4,000
  • 페이지수16페이지
  • 등록일2010.05.24
  • 저작시기2009.10
  • 파일형식한글(hwp)
  • 자료번호#613997
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니