- Description
 1. 얼굴이 포함된 2장의 컬러 이미지 파일을 열어서 얼굴 부분만 첫 번째, 두 번째 윈도우 창에 각각 보인다.
 2. 얼굴 영역에 모폴로지를 적용하여 노이즈를 제거한 후 세 번째, 네 번째 윈도우 창에 각각 보인다.
 3. 세 번째 얼굴에서 네 번째 얼굴로 서서히 변하는 이미지를 다섯 번째 윈도우 창에 보인다.


- Screen Shot

Source Image 1

Source Image2


Source Image에서 얼굴부분 윤곽만 따낸 Image


위에서 따낸 얼굴 Image에 Morphology를 적용해서 노이즈를 제거한 Image


실제로 Weighted Sum을 수행 한 뒤 생성된 Morphing Image


- Source Code

- Description

 1. 얼굴이 포함된 컬러 이미지 파일을 열어서 첫 번째 윈도우 창에 보인다.
 2. 컬러 이미지에서 얼굴 부분은 컬러로, 나머지 부분은 그레이로 하여 두 번째 창에 보인다.


- Screen Shot

원본 소스 이미지

컬러공간 변환(RGB to HSV)과 이미지연산, Threshold를 적용해서 얼굴부분 색만 추출한 이미지


- Source Code


- Visual Studio 6.0 Project File

- Description

 1. 이미지 파일을 열어서 첫 번째 윈도우 창에 보인다.
 2. 첫 번째 윈도우에서 마우스 클릭을 두 번하면 두 개의 마우스 커서 좌표를 각각 사각형의 왼쪽 위 좌표, 오른쪽 아래 좌표로 하여 사각형 영역을 설정하고, 이 영역의 이미지만 r, g, b 평균을 하여 두 번째 윈도우 창에 보인다.
 3. 이 때, 두 번째 창에는 선택된 영역의 크기만큼만 보여야 한다.


- Screen Shot



- Source Code



- Visual Studio 6.0 Project File


- 비교 : http://ryuisaka.com/334 (cvGetReal2D와 cvSetReal2D 함수를 사용한 버전)

/**********************************/

/*      Numerical Analysis Homework #2     */

/*      Department of Computer Science     */

/*      2003721181, Lee Seong woo          */

/**********************************/

#include <stdio.h>

#include <math.h>


#define CAPACITY 10


double func(double p);


int main(void)

{

        double p[CAPACITY];

        int i = 1;

        double tolerance = 0.0005;   // Tolerance - 오차 한계 값

        p[0] = 1.0; p[1] = 2.0;


        printf("-------------------------------------n");

        printf("n            pn              f(pn)   n");

        printf("-------------------------------------n");


        // p[i] 값과값 차이의 절대값이 Tolerance보다 작을 때 프로그램 종료

        while(fabs(p[i] - p[i - 1]) >= tolerance)

        {

                i++;

                p[i] = p[i-1] - (func(p[i-1]) * (p[i-1] - p[i-2])) / (func(p[i-1]) - func(p[i-2]));

                printf("%dt%.10ft%.10fn", i, p[i], func(p[i]));

        }

        printf("-------------------------------------n");


        return 0;

}


// 해를 구하기 위한 함수

double func(double p)

{

        return pow(p, 3) + 4 * pow(p, 2) - 10;

}


----
2007/09/20 - [놀이] - [과제] Numerical Analysis - C로 구현한 Bisection Method

/**************************************/

/*      Numerical Analysis Homework #1       */

/*      Department of Computer Science       */

/*      2003721181, Lee Seong woo              */

/**************************************/

#include <stdio.h>

#include <math.h>


double logB(double x, double base);

double func(double p);

int getIterations(double tolerance, double startPoint, double endPoint);


int main(void)

{

        double a = 1.0, b = 2.0, tolerance = 0.0005;

        int i, repeat;

       

        // 주어진 Tolerance를 이용해서 필요한 반복횟수를 구함

        repeat = getIterations(tolerance, a, b);

       

        printf("---------------------------------------------------------------------n");

        printf("n            an              bn              pn             f(pn)n");

        printf("---------------------------------------------------------------------n");

        for(i = 0; i < repeat; i++)

        {

                if(func(a) * func(a + ((b - a) / 2)) < 0)

                {

                        printf("%dt%.10ft%.10ft%.10ft%.10fn",

                              i + 1, a, b, a + ((b - a) / 2), func(a + ((b - a) / 2)));

                        b = a + ((b - a) / 2);

                }

                else

                {

                        printf("%dt%.10ft%.10ft%.10ft%.10fn",

                              i + 1, a, b, a + ((b - a) / 2), func(a + ((b - a) / 2)));

                        a = a + ((b - a) / 2);

                }

        }

        printf("---------------------------------------------------------------------n");


        return 0;

}


// 밑을 임의로 정할 수있는 로그함수

double logB(double x, double base)

{

        return log(x) / log(base);

}


// 해를 구하기 위한 함수

double func(double p)

{

        return pow(p, 3) + 4 * pow(p, 2) - 10;

}


// Tolerance에 따른 반복횟수를 구함

int getIterations(double tolerance, double startPoint, double endPoint)

{

        return ceil(logB((endPoint - startPoint) / tolerance, 2));

}

그냥 Windows 창 가지고 놀기 -_-


컴퓨터그래픽스 과제.
아니....명색이 OpenGL을 배우면 3D로 뭔가 멋진걸 만들어오라고 하시지....
왠 점찍고 선 그리고 도형 그리기냐고 -_-;;
별것도 아닌데 개고생 했다;;
관건은 역시나 창 크기가 변화했을 때의 좌표 처리.
그 외에는 순조롭게 풀렸고, 점찍기 구현 다 하고 나니 선 그리기와 도형 그리기는 5분만에
해결됐다.
소스는 첨부해놨으니 베끼고싶으면 베끼고 참고하고싶으면 참고하시길.
아래 그림은 그냥 허전해서 올려놓은것이니까 참고하시고, 그림이 잘 안보이면 클릭해서
보시길;


사용자 삽입 이미지

메인화면. 오른쪽버튼을 누르면 점찍기, 선그리기, 도형그리기 메뉴가 나온다.


사용자 삽입 이미지

점찍기 모드. 별다른거 없다. 그냥 점 찍는다.


사용자 삽입 이미지

선 그리기. 이것도 그냥 선 그린다.


사용자 삽입 이미지

도형그리기. 이것도 물론 도형만 그린다. 원, 사각형 이딴걸 그리는게 아니라 점 찍히는대로 따라가서 그리는거다.




사용자 삽입 이미지

SP3 네번째 과제, C#으로 구현한 아주아주아주 간단한 그림판.
기능은 선 그리기(실선, 점선, 파선), 도형 그리기(원, 채워진 원, 사각형, 채워진 사각형),
선 색 바꾸기, 선 두께 바꾸기.
자잘한 버그 수정하고 파일로 저장하는 기능 등 추가하고 Windows 내장 그림판 정도의
기능을 구현해보자.
근데.....언제??? -_-;;;
암튼...소스는 매우매우매우 스파게티같으니....베낄려면 베끼시고...
근데 지금 봐도 소스 정말 더럽다;;

+ Recent posts