분류 전체보기 267

[Unity] Google Cardboard Head Tracking

VR 세팅 개요 이전 게시글에서는 주어진 예제를 기반으로 VR 환경을 구축했었다. 이번에는 VR 개발에 필요한 최소한의 패키지만을 받아와서, 직접 VR을 개발할 수 있는 최소한의 기본 환경을 만들어보도록 하겠다. 본문 환경 세팅 일단 Cardboard XR 플러그 인을 설치해야 하므로, Package Manaer에서 깃 URL을 추가해 준다. https://github.com/googlevr/cardboard-xr-plugin.git 그리고 해당 게시글의 VR 빌드 세팅 부분을 그대로 따라 하면 된다. 카메라 설정 여기가 헤드셋의 움직임을 감지하기 위해 메인 카메라에 Tracked Pose Driver 컴포넌트를 추가해줘야 한다. Google Cardbard는 머리 회전을 감지하는 기능에 초점을 맞추었기..

Game/Unity 2024.02.03

[C] 구조체(Structure)

구조체 개요 프로그래밍을 하다 보면 서로 다른 타입의 변수들을 하나의 단위로 묶어야 할 때가 있다. 예를 들어, 학생들의 점수를 관리하는 프로그램을 만든다고 가정해 보자. 학생들의 이름을 저장해야 하므로 문자형 배열, 점수가 필요하므로 정수, 혹은 실수형 데이터가 필요할 것이다. 즉, 학생 한 명당 여러 개의 변수가 필요하므로, 학생 수가 많아질수록 관리해야 할 변수의 수가 기하급수적으로 늘어난다. 이는 가독성의 저하와 코드의 복잡성 증대로 인해 오류 발생 가능성을 야기한다. 이런 문제점을 해결하기 위한 방법으로 구조체를 사용하는 것이 매우 효과적이다. 구조체(Struct)는 서로 다른 타입의 변수들을 하나의 논리적 단위로 묶는 사용자 정의 타입이다. 위의 예시에서 구조체를 이용하여 각 학생들의 정보를 ..

Language/C 2024.01.31

[라즈베리파이] 기초 세팅

라즈베리파이 기초 세팅 개요 이번 시간에는 임베디드 리눅스 기반 개발 보드 중 하나인 라즈베리 파이를 세팅하는 방법에 대해 알아보도록 하겠다. 필자는 라즈베리 파이 버전 4를 사용하고 있으므로, 해당 모델을 기준으로 설명하도록 하겠다. 본문 설치 라즈베리파이는 전체 컴퓨터 시스템으로서 작동한다. 즉, 이를 위해 파일 시스템, 사용자 인터페이스, 네트워킹, 드라이버 지원 등을 제공하는 운영 체제가 필요하다. 따라서 내장 하드 드라이브가 없는 라즈베리파이는 SD 카드를 이용해 운영 체제 이미지를 복사하고, 필요한 부팅 설정을 구성해야 한다. 먼저 해당 링크를 타고 들어가서 라즈베리 파이 OS Imager를 설치해 주자. 그러면 다음과 같은 Imager 프로그램이 실행될 것이다. 어떤 종류의 디바이스인지 골라..

[C] 메모리 동적 할당

동적 할당 개요 이번 시간에는 C 언어의 핵심 요소 중 하나인 메모리 관리와 동적 할당에 대해 집중적으로 살펴보겠다. 동적 할당(Dynamic Allocation)은 프로그램 실행(런타임) 도중 필요한 메모리 공간을 할당하는 과정으로, 메모리 자원이 제한적인 환경에서 특히 중요하다. C 언어는 malloc, calloc, realloc, free와 같은 함수를 통해 개발자가 메모리를 효율적으로 관리할 수 있도록 지원한다. 이러한 동적 할당 메커니즘을 통해, 개발자는 필요한 메모리만을 할당하고, 사용이 끝난 메모리를 해제함으로써 시스템의 메모리 사용을 최적화할 수 있다. 본문 사용 이유 동적 메모리 할당과 해제는 C언어에서 메모리 사용의 효율성을 높이는 중요한 역할을 한다. 정적 할당 방식에서는 프로그램이..

Language/C 2024.01.29

[디지털영상처리] Morphological Image Processing (1)

Morphology 개요 모폴로지(Morphology)는 이미지의 구조와 형태를 분석하고 처리하는 방법론을 의미한다. 이는 기본적으로 이미지의 구성 요소들을 추출하고 나타내는 데 유용한 도구로 사용되며, 특히 이미지의 경계와 골격 같은 영역의 형태를 표현하고 기술하는 데 중요한 요소들이 포함된다. 또한, 모폴로지는 이미지의 전처리나 후처리 과정에도 활용되기도 한다. 이번 시간에는 모폴로지의 대표적인 기술인 침식(Erosion)과 팽창(Dilation), 오프닝(Opening)과 클로징(Closing)에 대해 배워보도록 하겠다. 본문 Set Theroy 모폴로지를 설명하기에 앞서, 형태학적인 연산의 범위(픽셀)를 제한하기 위해 집합론을 정의해야 한다. 즉, 이미지를 픽셀의 집합으로 간주하고, 각 픽셀을 좌..

[디지털영상처리] Color Image Processing (2)

본문 Pseudocolor Image 가색상(Pseudocolor) 이미지 처리는 단색 또는 흑백 이미지에 색상을 매핑하여 시각적으로 이해하기 쉽게 하는 방법이다. 예를 들어, 위와 같이 위성사진을 촬영한 결과물에 가색상을 입힌다고 가정해 보자. 좌측의 위성사진에 기온, 수심, 등고선 등의 지표의 밝기(Intensity)에 따라 사전에 정의해 둔 색상을 매핑하면 우측의 그림처럼 바뀐다. 즉, 위의 그래프처럼 밝기 값에 따라 R/G/B에 해당하는 값을 할당하는 사전에 정의된 함수를 이용한다. 이러한 함수는 일반적으로 사용자가 찾는 것이 아닌, 누군가 이미 정의한 coloramp을 사용한다. I = rgb2gray(imread('bone.jpg')); figure(1); imshow(I); colorbar;..

[디지털영상처리] Color Image Processing (1)

컬러 이미지 처리 개요 지금까지 이미지 처리를 배우며 대부분 흑백 이미지만 사용하였다. 이는 흑백 이미지가 이미지 처리의 기본 개념을 파악하기 용이하기 때문인데, 컬러 이미지에 비해 데이터 양이 적고 처리 속도가 빠르기 때문이다. 이번 시간에는 색상에 대한 개념부터 컬러 이미지 처리에 대한 전반적인 개념을 배우는 시간을 가지도록 해보자. 본문 색이란? 색(Color)이란 빛의 성질 중 하나로, 빛의 파장 분포에 의해 결정되며 인간의 눈과 뇌에 의해 인식되는 것을 의미한다. 이때 물리적인 특성보다는 시각적 경험에 의존하는 심리적 특성이다. 이때 빛과 색을 혼동하는 경우가 많은데, 일반적으로 빛(Light)은 물리적인 에너지의 형태로서 색을 생성하는 물리적인 원인이며, 색은 그 결과로써 인간이 인식하는 현상..

[C] 포인터(Pointer)

Pointer 개요 포인터(Pointer)는 프로그래밍에서 광범위하게 사용되는 개념으로, 특히 C 언어와 같은 저수준 프로그래밍 언어에서 중요한 역할을 한다. 포인터는 메모리의 주소를 저장하고, 이를 통해 다양한 데이터에 간접적으로 접근할 수 있는 변수다. C 언어에서 포인터는 메모리 관리, 배열과 문자열 처리, 동적 메모리 할당, 데이터 구조체 구현 등 여러 분야에서 핵심적인 도구로 사용된다. 이러한 포인터의 사용은 프로그램의 유연성과 효율성을 높이는 동시에, 복잡하고 섬세한 메모리 관리를 가능하게 한다. 본문에서는 포인터가 C 언어에서 어떻게 동작하며, 왜 그렇게 널리 사용되는지에 대해 자세히 살펴보겠다. 본문 사용 이유 포인터를 사용하면 메모리를 효율적으로 사용할 수 있다. 이는 포인터를 사용하면 ..

Language/C 2024.01.22

[아두이노] 기본 설정 방법

아두이노 개요 개요 아두이노(Arduino)는 AVR 기반의 마이크로컨트롤러다. 필자가 사용하는 UNO R3는 ATmega328P 8비트 컨트롤러를 이용하여 다양한 임베디드 개발을 진행할 수 있다. 이번 시간에는 아두이노를 이용해 개발하기 전 기초적인 환경 세팅을 진행하도록 하겠다. 본문 IDE 설치 먼저 아두이노 IDE를 설치하기 위해 다음 링크를 들어가 자신의 환경에 맞는 IDE를 설치해 주자. 이때 설치 파일 경로에 한글이 포함되면 에러가 발생할 수 있으므로, 한글이 들어가지 않도록 하자. IDE 설치가 완료되었으면, 아두이노를 PC에 연결하자. 그러면 위와 같이 드라이버 설치 문구가 뜰탠데, 해당 드라이버를 설치해주면 된다. 그리고 자신이 사용하고 있는 보드를 고르고, PC와 연결되어 있는 포트를..

Program/Arduino 2024.01.21

[디지털영상처리] Filtering in Frequency Domain (3)

본문 Zero Padding 디지털 영상 처리에서 이미지를 주기적인 신호로 간주하고 처리한다. 위의 그래프에서 왼쪽에 있는 것이 원래 신호고, 오른쪽에 있는 그래프가 이미지가 주기적이라는 것을 가정한 상태다. 이는 이미지의 한쪽 끝과 다른 쪽 끝이 서로 연결되어 있다고 가정하는 것과 동일하다. 이러한 처리 방식에서는 이미지의 오른쪽 끝과 왼쪽 끝, 상단과 하단이 서로 감싸는 Wraparound Error가 발생할 수 있다. 즉, 컨볼루션 연산 중 이미지의 한쪽 끝의 값이 반대편 끝에 영향을 미친다. 위의 두 신호 f(m)과 h(m)에 대해 컨볼루션 연산을 적용하는 과정을 통해 왜 이러한 일이 발생하는지 알아보자. 컨볼루션의 정의에 따라 h(m)을 y축에 대해 대칭시키면 다음과 같이 표현할 수 있을 것이다..