어플리케이션을 개발하다 보면 파일을 외장메모리 등에 저장해야 할 필요가 있다.

 

특정 경로를 지정해줬는데, 만약 해당 경로가 존재하지 않으면

 

error: No such file or directory

와 같은 에러를 뱉어내곤 한다.

 

해결하기 위해서는 다음과 같은 방법을 사용한다.

 

 

파일을 생성하기 전에 원하는 경로가 존재하는지 확인하고 만약 경로가 존재하지 않으면 생성한 후

 

파일을 생성할 경로를 반환해주는 메소드이다. 외장메모리의 유무도 확인한다.

 

	// Example
	public static synchronized String GetFilePath(int fileType, int fileId)
	{
		String sdcard = Environment.getExternalStorageState();
		File file = null;
		
		if ( !sdcard.equals(Environment.MEDIA_MOUNTED)) 
		{ 
			// SD카드가 마운트되어있지 않음
			file = Environment.getRootDirectory();
		}
		else
		{
			// SD카드가 마운트되어있음
			file = Environment.getExternalStorageDirectory();
		}

		
		String dir = file.getAbsolutePath() + String.format("/mytestdata/file_%02d", fileType);
		String path = file.getAbsolutePath() + String.format("/mytestdata/file_%02d/myfile%04d.mp4", fileType, fileId);

		file = new File(dir);
		if ( !file.exists() )
		{
			// 디렉토리가 존재하지 않으면 디렉토리 생성
			file.mkdirs();
		}
		
		// 파일 경로 반환
		return path;
	}

 

* 참고로 File 클래스의 멤버메소드에는 mkdirs()와 mkdir()이 있는데

 

 이름 그대로 mkdirs()는 목적지 경로까지 상위폴더를 포함하여 전체 경로를 생성하고, mkdir()은 지정한 폴더 하나만을 생성한다.

 

 둘 다 반환타입은 boolean으로, 경로 생성에 성공하면 true, 이미 존재하는 경로이거나 실패하면 false를 반환한다.

Posted by Kugi
,



윈도우즈 콘솔 창의 크기를 변경하고 싶다면 다음의 커맨드를 입력하면 된다.

 

mode con: lines=n cols=n

 

변수를 입력하지 않으면 현재 상태를 출력해준다.

 

콘솔 창의 크기가 변경 된 모습

 

cmd 창을 새로 열면 원래 사이즈로 열린다.

Posted by Kugi
,



3차원 좌표계를 표현할 땐 보통 아래의 그림과 같은

 

왼손 좌표계(left-handed coordinate system)와 오른손 좌표계(right-handed coordinate system) 두 가지 방법을 이용한다.

 

 

 

오른손 좌표계는 근 100여년 동안 표준적으로 사용되어온 방법이다. 물리학계를 비롯해 OpenGL 등 대부분은 이 좌표계를 사용한다.

 

왼손 좌표계를 사용하는 대표적인 사례로는 Direct3D가 있다.

 

이 두 좌표계를 외우는 방법은 다양하겠지만 필자의 경우 다음과 같은 방법으로 숙지했다.

 

  1. 박수 칠 때 처럼 양 손을 마주 보도록 펼친다. 이 때 엄지손가락은 나머지 손가락과 직각이 되도록 한다.

 

  2. 가운뎃손가락을 손바닥에 수직이 되도록 반 쯤 접고, 약손가락과 새끼손가락은 완전히 접는다.

 

  3. 마치 '쌍권총 자세'를 연상케하는 모양이 되었을 것이다.

 

     왼손은 엄지손가락부터 순서대로

 

     [엄지손가락-x, 집게손가락-y, 가운뎃손가락-z]

 

     오른손은 반대 순서로

 

     [엄지손가락-z, 집게손가락-y, 가운뎃손가락-x]

 

     이런 식으로 대응시킬 수 있다.

 

이 상태로 양 손의 집게손가락을 하늘을 향하게 해서 위의 그림에 나온 좌표계와 비교해보자.

 

똑같은 배치가 되어있음을 알 수 있을 것이다.

Posted by Kugi
,



Sorting Algorithm Animations 이라는 사이트(영문)이다.

 

http://www.sorting-algorithms.com/

 

삽입정렬, 선택정렬, 버블정렬, 쉘정렬, 합병정렬, 힙정렬, 퀵 정렬 등을

 

랜덤아이템세트, 거의 정렬된 아이템세트, 거꾸로 정렬된 아이템세트 등에 대해

 

어떤 식으로 동작하며 얼마나 걸리는지 등을 애니메이션화 하여 볼 수 있도록 해 준다.

 

특정 알고리즘만을 선택해서 자세히 볼 수도 있으며 다른 알고리즘과 비교도 가능하다.

 

각 정렬 알고리즘 별 특징이나 의사코드, 장단점 등도 볼 수 있도록 되어 있다.

 

각 항목의 이미지를 클릭하거나 새로고침 아이콘을 클릭하면 애니메이션이 동작한다.

 

Posted by Kugi
,



핀홀(pinhole)이란 말 그대로 종이에 핀으로 뚫은 구멍 같은 매우 작은 구멍을 말한다.

 

핀홀을 통해서 들어오는 빛을 받아들여 촬영하는 카메라를 핀홀 카메라(pinhole camera)라고 한다.

 

흔히 '바늘구멍 사진기'라고도 한다.

 

핀홀 카메라 모델은 물체에 반사된 빛이 우리 눈의 수정체(또는 카메라의 렌즈)를 거쳐서

 

망막(또는 카메라의 센서)에 도달하는 구조를 관찰하는 데 유용하다.

 

 

단, 핀홀 카메라에서는 빛이 아주 작은 구멍을 거쳐서 들어오기 때문에 빛을 모으기에는 부적합하다.

 

따라서 일반적인 카메라는 핀홀이 아닌 렌즈를 이용한다. 그러나 렌즈를 사용하게 되면

 

카메라의 구조가 복잡해지며 렌즈 자체의 왜곡으로 인하여 영상이 손상될 수 있다.

 

 

핀홀 카메라의 원리는 다음과 같다.

 

3차원인 실제 세계에서 빛이 물체의 어느 한 점에서 반사되면, 다양한 각도의 광선 중에서

 

핀홀을 향하는 광선만이 핀홀 평면에 가로막히지 않고 나아가게 된다.

 

결과적으로 이 광선은 영상 평면(image plane) 또는 투영 평면(projective plane)이라고 불리는 곳에

 

맺히게 된다. 이 상(image)의 크기는 핀홀 카메라의 초점 거리(focal length)에 의해 결정된다.

 

이상적인 핀홀 카메라일 경우, 초점 거리는 핀홀 구멍에서부터 영상 평면까지의 거리이다.

 

 

 

 

위의 그림에서 A와 a는 각각 실제 물체의 크기와 영상 내의 물체 크기를 나타낸다.

 

그림에서 꼭지점을 맞대고 있는 두 삼각형을 잘 살펴보면 다음과 같은 관계를 찾을 수 있다.

 

 

 

이를 이용하여 영상에서의 물체의 크기는 다음과 같이 구해진다.

 

 

 

핀홀 카메라 모델을 다음 그림처럼 약간 변형하면 수식을 조금 더 간단히 할 수 있다.

 

우리가 일반적으로 사용하는 렌즈카메라에서도 위 그림처럼 영상 평면(센서)이 투영중심 앞에 위치한다.

 

 

3차원 공간상의 한 점 Q=(A,Y,Z)에서 출발한 빛은 투영 중심을 향해 직진하여 영상 평면과 만난다.

 

이 점을 q=(a,y,f)로 표현한다.영상 평면이 핀홀 앞으로 이동하면서 수식에서 음수 부호가 사라졌다.

 

 

 

위 그림을 보면 광축과 영상 평면이 만나는 주점(principle point)이 항상 카메라의 영상 센서의 중심에

 

위치하게 될 것이라고 생각할 수 있지만, 실제적으로 광축이 센서 중심을 지나도록 하기는 매우 어렵다.

 

따라서 투영 평면에서 좌표 중심의 이동 변위를 표현하기 위해 새로운 매개변수(parameter)인 c를 사용해야 한다.

 

새로운 매개변수를 추가하여 나타낸 영상 평면에 맺히는 점의 좌표를 다음과 같이 표현할 수 있다.

 

 

 

  a : 영상에 맺히는 상의 길이(가로축)

  A : 물체의 실제 길이(가로축)

  y : 영상에 맺히는 상의 길이(세로축)

  Y : 물체의 실제 길이(세로축)

  f : 핀홀 카메라의 초점 거리

  F : 카메라와 물체 사이의 거리

  c : 투영 평면에서 좌표 중심의 이동 변위를 표현하기 위한 보조 변수

 

 

여기서 두 개의 초점 거리(f)를 사용한 이유는 대다수의 영상 센서의 개별 픽셀들이

 

정사각형이 아닌 직사각형의 형태이기 때문이다.

 

 

초점 거리 f는 렌즈의 실제 초점 거리와 영상 센서의 개별 요소 크기 s를 곱한 값이다.

 

여기서 s의 단위는(픽셀)/(거리단위[각주:1])이고,

 

실제(물리적) 초점 거리 F가 거리단위를 사용하기 때문에 f는 픽셀 단위를 갖게 된다.

 

이 때 s와 F는 카메라 내부 보정 과정에서 직접적으로 구해지지 않는다.

 

 

 

 


참고 문헌


LEARNING OPEN CV 제대로 배우기

저자
개리 로스트 브라드스키, 에이드리안 캘러 지음
출판사
한빛미디어 | 2009-09-28 출간
카테고리
컴퓨터/IT
책소개
OPENCV 제대로 배워라!개리 로스트 브라드스키, 에이드리안 ...
가격비교

 

 


  1. 밀리미터(mm) 등의 일반적인 거리 단위로써 미터(meter), 미크론(micron) 등의 단위로 바꾸어도 상관 없다. [본문으로]

'Development > Image Processing' 카테고리의 다른 글

Visual Studio에 OpenCV 개발환경 구축하기  (0) 2014.10.05
적분 영상 (integral image)  (13) 2012.09.16
Posted by Kugi
,