전체 글 102

[컴퓨터비전개론][3장]이미지 resize

개요 컴퓨터 비전에서는 주어진 이미지를 크게 만들거나 작게 만들어야하는 순간들이 있다. 같은 물체임에도 거리가 달라 다른 크기로 보이는 물체들의 크기를 맞추는 등이 그 예시이다. 이때 정보의 손실을 최소화하면서 축소, 확대, 복구등을 하는 법을 배워보자. 이미지 축소 우선 이미지의 축소를 생각해보자. 이미지를 가로세로 크기를 각각 1/2씩 줄인다고 할때 가장 단순한 방법은 4개의 픽셀중 하나씩 추출하여 축소하는 방식이다. 하지만 이는 나머지 세 픽셀이 완전 소실되어 오브젝트의 정보가 소실될 위험이 크다. 이러한 해상도의 부족으로 인해 일어나는 왜곡을 앨리어싱이라고 한다. 참고로 이러한 공간적인 앨리어싱도 존재하지만 프레임의 부족으로 실제 현상과 왜곡이 일어나는 시간적 앨리어싱도 존재한다. 흐린 후 축소 ..

[컴퓨터비전개론][2장]edge detection

개요 edge detection은 말그대로 이미지 요소들의 테두리를 추출하는것이다. 컴퓨터 비전에서 물체의 형태를 파악하는데 있어 edge detection은 유용하다. 우리는 이미지의 픽셀간 변화량을 토대로 이웃에 비해 급격히 변하는 부분을 테두리로 추출하는 기법을 주로 사용할 것이다. 기울기 이미지 우리는 우선 각 픽셀의 기울기를 담은 x축, y축 기울기 이미지를 각각 만들어 볼 것이다. x축 기울기 이미지, y축 기울기 이미지는 각 픽셀에 원본 이미지의 해당 픽셀 부분이 가지는 x축 또는 y축으로의 기울기를 가진 이미지라고 볼 수 있다. 즉 이미지를 함수로 봤을때의 편미분값을 가진 셈인데 우린 이웃한 픽셀간의 값 차이를 기울기로 보는 근사 미분을 사용할 것이다. x축 기울기 이미지 원본 이미지에 다..

[Effective C++]항목 9~12 : 생성자, 소멸자 및 대입 연산자 2

항목 9 : 객체 생성 및 소멸 과정에서는 자신의 가상 함수를 호출하면 위험하다.객체 생성 시점에서는 조상 클래스의 생성자부터 호출되어 아래로 내려간다. 한 후손 클래스가 생성된다고 하자. 그러면 최상위 조상의 생성자부터 호출하며 내려갈것이다. 이때 중간의 한 조상이 생성자에서 자신의 가상함수를 호출하면 그 생성이 후손 클래스의 생성과정임에도 불구하고 호출한 자기자신의 실제 함수가 호출되어 버린다. 이는 아직 조상 자신까지의 생성만 진행되고 후손 부분의 생성은 아직 진행되지않아 현재 생성 시점에서는 실제 타입이 조상 자신의 타입으로 인식되기 때문이다. 만약 이것이 노린 것이라면 모르겠지만 보통 가상함수는 실제 타입의 함수를 호출하려는 목적이 대부분이므로 이를 생각하며 사용하는 것이라면 피해야한다. 소멸자..

[Effective C++]항목 5~8 : 생성자, 소멸자 및 대입 연산자 1

항목 5 : 클래스에서 자동으로 생성되는 메소드들 C++에서는 우리가 따로 작성하지 않으면 컴파일러가 자동으로 생성하는 기본 메소드들이 있다. 기본 생성자 각 멤버의 기본 생성자 호출 생성자가 없을 시 자동으로 생성 복사 생성자 각 멤버 간 복사 생성자 호출복사 생성자, 이동 생성자, 대입 연산자 중 하나라도 있을 시 생성안됨 복사 대입 연산자 각 멤버 간 복사 대입 연산자 호출 복사 대입 연산자, 이동 생성자, 대입 연산자 중 하나라도 있을 시 생성안됨 이동 생성자 각 멤버 간 이동 생성자 호출 이동 생성자, 복사 생성자, 복사 대입 연산자, 이동 대입 연산자, 소멸자 중 하나라도 있을 시 생성안됨 이동 대입 연산자 각 멤버 간 이동 대입 연산자 호출 이동 대입 연산자, 복사 생성자, 복사 대입 연산자..

[3인 개발][농사 디펜스]Don't touch my farm

플레이 영상 GitHub GitHub - PNUHyeonWoo/DontTouchMyFarm: 3D farming and defence game made with Unity 3D farming and defence game made with Unity. Contribute to PNUHyeonWoo/DontTouchMyFarm development by creating an account on GitHub. github.com 개발 도구 유니티 및 블렌더 개요 포트폴리오 목적으로 정보컴퓨터공학부 동기들과 함께 개발했습니다. 농작물을 벽과 터렛, 폭탄으로 지켜나가며 돈을 불려나가는 것이 목적인 디펜스 게임입니다. 역할 본인: 구조물 설치 및 제거, 스테이지 관리, 몬스터 스폰, 터렛 및 폭탄, UI 기능 및..

[컴퓨터비전개론][1장]이미지 필터링

개요 이미지 필터링은 주어진 이미지에 일련의 연산을 거쳐 새 이미지를 얻어내는 것을 말한다. 컴퓨터 비전에서는 주로 이미지로부터 정보를 얻기전 전처리를 위해 이미지 필터링을 사용한다. 참고로 머신러닝에서도 이미지 학습전 전처리용도로 사용된다. 이미지를 바라보는 관점 컴퓨터 과학에서는 이미지를 다음 두가지 관점으로 볼 수 있다. 1. 비트 행렬 2. x,y좌표 입력시 컬러값을 주는 함수 2의 관점은 각 픽셀값이 연속적이라고 생각한다면(선형적으로든 어떤 방식으로든) 기울기같은 여러 유용한 관점도 활용 할 수 있게 된다. 2의 관점은 f(x,y),g(x,y)등으로 표현할 수 있다. 이에 대한 여러 활용은 다음과 같다. g(x,y) = f(x,y) + 20 =>g는 f보다 20 밝은 이미지 g(x,y) = f(..

[Effective C++]항목 1~4 : C++ 기초 사고방식

항목 1 : C++은 언어들의 연합체이다. C++은 다중패러다임 프로그래밍 언어로써 절차,객체 지향 프로그래밍, 함수형 프로그래밍, 일반화 프로그래밍등의 다양한 프로그래밍 패러다임을 적용할 수 있다. 이러한 C++을 공부할땐 다소 혼란스러울 수 있는데 이러한 C++을 다음 네가지 영역으로 구분한다면 도움이 될 수 있다. C : 기존 C에서도 제공되던 부분들이며 C의 규칙들을 따른다. 객체 지향 개념의 C++: C++로 넘어오며 추가된 클래스등의 객체지향 개념들이다. 템플릿 C++ : C++의 강력한 기능중 하나인 템플릿을 활용하는 부분들이다. 일반화에 큰 힘을 준다. STL : 표준 라이브러리로 컨테이너와 알고리즘, 반복자와 함수 객체들로써 돌아간다. C++을 구성하고 있는 이 네가지 부분에 대한 패러다..

[게임 서버][7장]데이터베이스

개요 데이터베이스는 기본 파일시스템위에서 b트리, 해쉬테이블등으로 효율적인 데이터 관리와 동시에 여러 질의, 원자성 등의 추가적인 기능들을 사용할 수 있게 만들어진 데이터 관리 시스템을 말한다. 이때 DBMS이라는 프로그램으로 데이터베이스 만들고 관리 할 수 있다. DBMS는 사용자가 DBMS의 인터페이스로 데이터베이스를 생성하면 파일 시스템위에 자신의 자료구조와 알고리즘을 이용하여 자신의 데이터베이스 파일을 구축하고 기능들을 제공해준다. 이러한 기능들을 파일 시스템 위에 직접 구현하여 사용할 수도 있겠지만 인력과 시간이 상당히 많이 들어가기에 대부분의 경우 상용 DBMS를 이용하여 데이터베이스를 사용한다. 보통 게임 뿐 아니라 대부분의 분야에서 서버에 데이터베이스를 사용할때는 DBMS로 운용되는 데이터..

[게임 서버][6장]프라우드넷

개요 프라우드넷은 게임 서버, 클라이언트 프레임워크인 네트워크 엔진 중 하나이다. 한국의 Nettention에서 개발하였으며 현재는 펄어비스의 자회사가 되었다. ​ 기본 구조 프라우드넷은 서버와 클라이언트 프로그램 각각에서 NetServer 클래스와 NetClient 클래스를 각자 사용한다. 서버에서는 NetServer.Create()로 NetServer인스턴스를 생성 한뒤 NetServer.Start()로 서버를 열 수 있다. 특정 프로토콜 버전(우리가 만들고 있는 프로그램의 프로토콜 버전으로 스스로의 버전 동기화에 사용하면 된다.)과 리스닝 포트를 넣으면서 Start를 호출하면 해당 포트에 서버가 열린다. 클라이언트에서는 CNetClient.Create()로 인스턴스를 생성하고 CNetClient.C..

[게임 서버][5장]게임 네트워킹

개요 이번장에서는 이동 동기화, 서버 성능 개선 방안등의 서버 네트워킹에 필요한 다양한 주제를 다룬다. ​ 이동 동기화 보통 서버와 클라이언트간 이동은 다음과 같이 처리된다. 1. 클라이언트에서 일정간격으로 서버에 자신의 이동정보를 보낸다. 2. 서버에서는 각 클라이언트들의 이동정보를 받을때마다 서버 메모리의 위치 정보들을 갱신한다. 3. 서버에서는 자체적인 타이머로 일정간격마다 모든 클라이언트들에 각각 필요한 다른 클라이언트들의 위치정보를 보내준다. ​ p2p에서는 다음과 같이 처리한다. 각 클라이언트는 일정간격으로 자신의 이동정보를 다른 클라이언트들에 보낸다. 각 클라이언트는 다른 클라이언트의 이동정보를 받으면 위치 정보를 갱신한다. ​ 두 방법 중 뭐가 됬든 어떠한 객체들의 실제 위치를 가지고 있는..