프로그래밍 공부 방법

프로그래밍 2014. 7. 31. 15:56

프로그램을 어떻게 하면 잘 짤수 있는지, 그리고 프로그래밍은 어떻게 공부하면 좋을지 문의하시는 분들이 종종 있습니다.


이런 질문은 저한테 할게 아니라 대가분들에게나 해야겠지만, 어쨌든 프로그래밍에 대해 나름 생각하는 바를 몇가지 적어봅니다.



1. 프로그래밍 언어는 도구


프로그래밍을 배운다 하면 처음에는 c, c++, java 등과 같은 프로그래밍 언어를 익히는게 일반적입니다. 하지만 프로그래밍 책을 사서 열심히 익혔다고 해서 그 사람이 프로그램을 잘 짤수 있는건 아닙니다. 책을 읽긴 읽었는데 막상 자신이 직접 프로그램을 짜려고 보면 도대체 어디서부터 시작해야 할지 뭘 해야할지 막막한 경우가 대부분입니다.


그런데, 여기서 '나의 공부가 부족했구나...' 하면서 책을 한권 더 사서 본다든가 아니면 자신의 머리를 탓하거나 할 필요는 없습니다. 프로그래밍 언어는 도구일 뿐, 도구 사용법을 익혔다 해서 프로그램을 잘 짤수 있는건 아니기 때문입니다. 예컨데, 나무를 한번도 베보지도 않은 사람이 도끼에 대해서만 열심히 연구했다고 해서 나무를 잘 벨수 있는 것은 아니기 때문입니다.


프로그래밍 언어는 그냥 기본적인 도구 사용법 정도를 익혔다 정도로 생각하면 됩니다. 그리고 도구 사용법이 햇갈리면 그때 그때 책이나 인터넷, 설명서 등을 찾아볼 수 있을 정도면 됩니다.



2. 프로그래밍의 즐거움


당연한 말이지만 프로그램은 자신이 직접 짜봐야만 실력이 늡니다. 그런데, 단지 코딩 실력을 높이기 위해서 또는 공부를 위해서 프로그램을 짜는 것은 그다지 효과적이지 않습니다.


프로그래밍을 배우는 이유는 자신이 원하는 프로그램을 직접 구현하기 위해서일 것입니다. 저의 경우는 당시 오락실에서 한참 유행하던 테트리스 게임을 직접 구현해보고 싶은 마음에 시작했지만 사람에 따라 필요한 목적은 다 다를 것입니다. 어쨌든 그 목적이 무엇이든 자신이 원하는 프로그램을 목표로 설계도 해보고 하나씩 필요한 공부를 해 보라고 말씀드리고 싶습니다. 만일 목표로 하는 프로그램이 없다면 새로 하나 만들어서라도 구체적인 목표를 가지고 프로그래밍을 하는게 좋습니다.


자신이 꼭 만들어보고 싶은 프로그램이 있고 지금 그 프로그램을 구현하고 있거나 하나씩 준비해 가고 있다면 중간 중간 부딪히는 어려움도 즐거움이 될 수 있습니다. 그리고 그 프로그램이 완성되어 감에 따라 어느덧 자신의 프로그래밍 실력도 자연스럽게 늘어 있음을 발견하게 될 것입니다.



3. 한걸음 더


프로그래밍에 재미를 붙이다 보면 좀더 깊이있는, 그리고 좀더 효율적인 프로그램에 대한 필요성을 느낄 수 있습니다. 그럴 때는 프로그래밍 언어, 자료구조(data structure), 알고리즘, 컴퓨터 구조 등에 대한 보다 깊은 이해와 공부가 도움이 될 수 있습니다. 하지만 모든 것을 한꺼번에 할 수는 없으며 그때 그때 필요한 대로 조금씩 익혀가면 좋다고 생각합니다.



by 다크 프로그래머


'프로그래밍' 카테고리의 다른 글

OpenCV + CUDA 직접 빌드하기 (Windows/Linux 종합)  (23) 2021.06.25
Matlab 핸드북 (참고용)  (0) 2017.11.21

카메라 캘리브레이션 프로그램 (DarkCamCalibrator)

개발한 것들 2014. 7. 17. 21:14

카메라 캘리브레이션용 프로그램입니다. 별도 설치없이 실행파일 하나로 바로 실행됩니다 

  • 3가지 캘리브레이션 방법 제공
  • 왜곡보정, topview 변환
  • 다양한 캘리브레이션 옵션
  • windows only


※ 이 프로그램은 코드서명을 하지 않았기 때문에 Windows 및 웹브라우져에 위해 다운로드 및 실행이 차단될 수 있습니다. 100% 안전한 프로그래이긴 합니다만 필요한 분들만 사용하시기 바랍니다..

※ Since this program is not code-signed, download and execution may be blocked by Windows and web browsers. This is a personally created program and a 100% safe program, but only for those who need it.



Ver1.1 다운로드 (last updated: 2020.10.10) :


direct download: DarkCamCalibrator1.1.zip

github: https://github.com/darkpgmr/DarkCamCalibrator

previous versions: check Version History below



< 5x8 체스보드를 이용한 캘리브레이션 예 >


유투브 동영상: https://youtu.be/QrCXTf0gwBk


사용법 (How to use)


- 'Load Images..' 버튼을 눌러 캘리브레이션 패턴(체스보드)을 촬영한 이미지들을 불러옴

- 또는 'Live Cam' 버튼을 눌러 웹캠과 실시간 연결한 후 스페이스 바를 눌러서 이미지 획득

- 캘리브레이션에 사용된 체스보드의 Grid Rows, Grid Cols, Cell Sz(mm)를 입력

- 'Detect Corners' 버튼을 눌러서 코너점 검출

- 캘리브레이션 옵션 설정 (왜곡보정 여부, fx=fy 여부 등)

- 원하는 방법의 캘리브레이션 수행하고 결과 확인 ('Calib Zhang', 'Calib FOV', ...)

  (각 캘리브레이션 방법은 아래의 설명 참조)

- 이미지 목록에서 체크된 이미지에 대해서만 캘리브레이션이 수행됨

- Undistort Image: 이미지 목록에서 선택된 이미지에 대해 왜곡보정 결과 출력

- Save Images..: 이미지 목록의 이미지들을 파일(png 포맷)로 저장

- Save Settings: 현재의 사용자 설정을 저장 (다음 번 프로그램 실행시 저장된 설정이 유지됨)


※ rms (root mean square error): average reprojection pixel error



1. Calib Zhang (opencv) 방법


컴퓨터 비전 분야에서 사용되는 대표적인 카메라 모델인 Z. Zhang 캘리브레이션 방법. opencv 구현을 그대로 사용하였으며 성능은 opencv와 동일


Z. Zhang. “A Flexible New Technique for Camera Calibration”, IEEE Trans. Pattern Analysis and Machine Intelligence, 22(11):1330-1334, 2000



2. Calib FOV (coupled) 방법


F. Devernay 논문의 FOV 왜곡모델을 이용한 카메라 캘리브레이션 방법. Levenberg–Marquardt 최적화 기법을 이용하여 직접 구현함. Z. Zhang 모델과 달리 왜곡 파라미터가 w 하나이며 왜곡보정된 좌표를 atan 함수로 한번에 구할 수 있다는 장점이 있음


F. Devernay and O. D. Faugeras. Straight lines have to be straight. Machine Vision and Applications, 13(1):14?24, 2001



3. Calib FOV (decoupled) 방법


F. Devernay 논문의 FOV 왜곡모델을 이용한 카메라 캘리브레이션 방법. 단, 왜곡 파라미터(w)를 정규 이미지 좌표가 아닌 픽셀 좌표에서 계산한 것이 차이점임. decoupled라고 이름을 붙인 이유는 왜곡 파라미터를 focal length와 무관하게 추정할 수 있기 때문 (컴퓨터 비전 분야에서는 왜곡 모델을 정규 이미지 좌표에서 계산하는 것이 일반적이며, 이로 인해 왜곡 파라미터 추정과 focal length 추정 문제가 서로 coupling되는 문제점이 있음)


☞ coupled/decoupled는 나름 용어를 만들어 본 것으로서 카메라 캘리브레이션에서 일반적으로 사용되는 용어는 아닙니다.



버전 히스토리 (Version History)


*DarkCamCalibrator 1.1 (2020.10.4)

- FOV 캘리브레이션을 LM 최적화 기법을 적용하여 직접 구현

- FOV decoupled 방법을 추가

- 체스보드의 가로, 세로 격자수에 대한 짝수,홀수 제한을 제거

- 영상왜곡 보정 기능을 추가


*DarkCamCalibrator 1.0 (2014.7.17)

- 초기 버전

DarkCamCalibrator.zip

DarkCamCalibratorPGR.zip



by 다크 프로그래머


투표

잡기장 2014. 5. 30. 16:22

오늘 아침 일어나자 마자 투표를 하고 왔다. 사전투표제가 생겨서 이렇게 아무때나 투표를 할수 있으니 참 좋은 세상이 되었다. 사실 누가 나오는지도 잘 모르기 때문에 선관위에서 나눠준 홍보책자를 아침에 잠시 살펴보았다. 그런데 이 많은 사람들이 다 뭐 하는 사람인지도 잘 모르겠고 그 사람이 그 사람같기도 하고 갑자기 투표를 하지 말까 하는 생각도 든다. 그래도 투표는 해야지 하고 마음을 다잡고는 관상도 보고 경력도 보고, 재산이라든가 정책이라고 적어놓은 것들도 보지만 책자만 보고 알수 있는 것은 참 제한적이다. 그래도 스마트폰으로 검색해 보면 책자에는 없는 과거 행적같은게 나오니 많은 참고가 된다. 기본적으로는 사람을 보고 뽑아야겠지만 그걸 알수 있는 방법이 없으니 기껏 본다는게 관상, 재산, 소속 정당, 과거경력 정도이다. 그래도 내 스스로 사람을 선택하는데 있어서 과거와 달라진게 있다면 그냥 마음이 가는 사람을 뽑는다는 것이다. 예전에는 그나마 좀더 가능성이 높은 사람을 뽑기도 했지만 내가 무슨 정치공학자도 아니고 그런게 다 무슨 소용인가 싶다. 많은 사람들이 자신의 마음의 목소리를 내고 그러한 목소리가 모여 뜻을 형성하고 또 서로 어우러지는 그런 사회가 왔으면 좋겠다. 어쨌거나 이렇게 투표를 하고 나니 나름 보람은 있다.


by 다크 프로그래머


'잡기장' 카테고리의 다른 글

맛있는 배  (9) 2014.09.06
무제  (4) 2014.04.23
스티브 잡스와 쇼트  (5) 2014.02.20