[Python] 1. 파이썬의 기본 문법 (1)
1, 2, 3, 아니 학부시절까지만 해도 나는 파이썬과 거리가 먼 사람이라고 생각했었는데어느덧 파이썬 포스팅을 하고있다.기본 문법만 가볍게 넘어가려고 한다.C, JAVA, C++ 등을 배우고 파이썬 문법을 접하니 신세계가 아닐 수 없다.그렇지만 전자의 것들을 배우고서 나중에 파이썬을 배웠으면 좋겠다고 생각한다.파이썬은 내가 느끼기로, 쉽고, 간결하며 영어 문장같은 문법으로 이루어져있다.특히나 불편한 컴파일 과정도 없어서 편리하다. 즉, 정리하자면 파이썬은 1. 쉽다2. 간결하다3. 영어문장 쓰는 것 같다4. 불편한 컴파일 과정이 없다.5. 성능이 좋다 (아직 겪진 못했다)6. '넘파이'라는 좋은, 아주 좋은 라이브러리를 포함할 수 있다.7. 딥러닝 프레임워크(Caffe, TensorFlow, Chaine..
2017.05.24
몰입, 그리고 내 논문에 대한 비판적인 사고
"나는 대학원생 때 알았더라면 좋았을 것을" 이라는 주제로 한달에 한번, 혹은 몇번씩 포스트가 되는 블로그 글을 메일로 받아보고 있다.그러던 오늘, 정말 오랜만에 포스트를 받아보고 이 블로그에 다시 적게되었다.출처는 다음과 같고, 좋은 글이 정말정말 많다. 연구와 논문에 얽매여 있는 사람이라면, 연구생이라면, 대학원생이라면 반드시 읽어도 좋을 글이 수두룩하다. 나는 이 글을 오래 기억하고, 새기고 싶어서 블로그에 기록하기로 했다. 이번에 다루고자 하는 주제는 아주 중요하다. 대학원 생활에서 ‘연구’라는 측면 하나만 놓고 본다면 가장 중요한 메시지가 될 것이다. 더 나아가서는 대학원 생활뿐만이 아니라, 지식 근로자(knowledge worker)라면 누구나 중요하게 여겨야 할 부분이라고 생각한다. 그것은 ..
2017.04.06
no image
[OpenCV] Image Denoising
Image Denoising 영상처리 분야에서 중요한 부분이며 가장 많이 쓰이게 되는 부분중 하나로 이미지 노이즈 제거를 뽑을 수 있겠다. 이미 opencv에 이미지 노이즈를 제거하는 많은 알고리즘들과 함수들이 존재한다. 그 중 알아볼 것은 Non-local means Denoising 알고리즘이다. 이 전에 나왔던 기술들인 Gaussian blurring, Median Blurring 등과 같은 많은 이미지 평활화 기법을 보았으며, 노이즈가 조금 있는 영상에 대해 어느정도 효과를 보일 수 있었다. 또한 이러한 기능에서 각 픽셀 주변 작은 이웃 화소를 통해 중심요소를 대체해버리는 등 가우시안 기법, 평균, 중앙값 등을 이용한 연산을 수행해 왔다. 즉, 픽셀에서 노이즈 제거는 그 근처에 국한되었다는 것이다..
2017.02.16
no image
[OpenCV] Bilateral Filter 적용하기
Bilateral Filter OpenCV에서 대표적인 필터로는 blur, GaussianBlur, medianBlur 그리고 BilateralFilter 가 있다. 이 필터는 선형으로 처리되지 않고, 엣지와 노이즈를 줄여주어 부드러운 영상이 만들어지게 된다. 변수의 값이 크면 클수록 픽셀에 미치는 영향이 많아져 가중치가 커지게 된다. bilateralFilter(src, dst, d, sigmaColor, sigmaSpace); src : 입력 이미지 dst : 출력 이미지 d : 필터링에 이용하는 이웃한 픽셀의 지름을 정의 불가능한경우 sigmaspace 를 사용 sigmaColor : 컬러공간의 시그마공간 정의, 클수록 이웃한 픽셀과 기준색상의 영향이 커진다 sigmaSpace : 시그마 필터를 조..
2017.02.15
no image
[Object Tracking] Optical Flow 비교
1. Block matching method OpenCV function : cvCalcOpticlFlowBM 원리 : Block matching 방식은 프레임을 일정한 크기의 블록으로 나누고 현재 블록과 가장 유사한 블록을 이전 프레임에서 찾아 그 블록으로 현재의 블록을 추정하는 방법 단점 : Block Matcing 방법의 움직임 벡터 추정 과정에서 가장 정확한 값을 알아내기 위해서는 블록 주변의 모든 변위에 대해 평균 절대값 차이를 계산해야 한느데, 이 때 윈도우 크기가 커질수록 많은 연산 시간을 요구한다. 또한 블록 크기에 따라 벡터의 크기가 한정적이 되므로 움직임 벡터를 찾는데 있어서 제약이 따른다. 장점 : 블록 움직임 추정 방법 중 탐색 영역 내에 후보 블록 과의 차이를 비교하여 유사한 블록..
2017.02.09
no image
[OpenCV] SimpleBlobDetector 을 이용한 Blob Detection
OpenCV에 내장되어있는 SimpleBlobDetector() 이용하여 간단한 Blob Detection을 수행해 보았다. 이 클래스는 features2d.hpp 에 내장되어있다. 그리고 Params 변수를 조절하여 원하는 값을 넣을 수 있고, 그 값으로는 다음과 같다. 자세한 사항은 레퍼러스를 참조해 보도록 한다. By color. This filter compares the intensity of a binary image at the center of a blob to blobColor. If they differ, the blob is filtered out. Use blobColor = 0 to extract dark blobs and blobColor = 255 to extract light..
2017.02.08
no image
[Object Tracking] SVM을 이용한 HOG 기반 객체 추적
People Detection with HOG(Histogram of Oriented Gradients) and SVM(Support Vector Machines) [그림 1] HOG+SVM을 이용한 보행자 검출[참고자료 1] 보통 SVM을 이용하여 HOG 기반 객체 추적을 실행하려면 실행하고자 하는 데이터에 맞게 학습된 SVM 분류기가 필요하고, HOG feature가 필요하다. 기본 내장되어있는 opencv 로도 해결이 가능하지만 좀 더 빠른 성능을 위해서라면 CUDA 라이브러리를 이용한 GPU 프로그래밍을 하는 것이 좋다. 그런데 CUDA 라이브러리는 아직 visual studio 2015 를 지원하지 않을 뿐만 아니라 opencv 만 쓰다가 다른걸 써보려니 적응이 안되고(?) 환경 설정에 예민한 ..
2017.02.01
no image
[CUDA] Visual Studio 2015, OpenCV , CUDA 연동하기
opencv_cudaobjdetect300d.lib opencv_cudawarping300d.lib opencv_cudaimgproc300d.lib object tracking 관련 구글링을 하던 도중 써볼만한 코드가 생겨 테스트 해보려고 했는데 "cuda~~" 라는 헤더파일과 라이브러리 파일이 자꾸 없다고 떴다. 뭣도 모르고 opencv에 기본 내장되어있는 파일인줄알고 환경설정만 죽어라 삽질한 결과 CUDA 라는 프로그램을 opencv에 연동해야하고, 아래와 같은 cuda~~로 시작되는 라이브러리나 헤더파일은 그 프로그램에 들어있어서 연동하면 쓸 수 있게 되어있다고 한다. 간단히 말해서 GPU 관련된 클래스를 사용하기 위한 개발환경 설치 단계이다. 한참을 삽질하고 난 뒤에야 알게 된 결과... 조금 더..
2017.01.25
no image
[Stereo Vision] kinect 설치하기 (Visual Studio 2015, Windows 10, 64 bit, usb 3.0)
[Kinect] kinect 설치하기 (Windows 10, 64 bit, usb 3.0) 환경은 Windows 10, 64bit, usb 3.0, Visual Studio 2015 이다. usb 3.0 버전은 키넥트 SDK 프로그램 다운로드가 안된다고 하여, 키넥트 SDK 1.8 버전을 다운받았다. 3.0 버전이 아니거나 최신버전 다운을 받고싶다면 아래 사이트에서 SDK를 다운하면 된다. http://www.kinectforwindows.com/ 2.0 버전이거나 낮은 버전을 다운 받고 싶다면 아래 사이트에서 적절한 SDK를 다운하면 된다. 나는 v1.8 을 다운받았다. https://www.microsoft.com/en-us/search/result.aspx?q=kinect+for+windows+sd..
2017.01.19
no image
[Image Processing] OpenCV Watershed를 이용한 영상 분할
OpenCV Watershed를 이용한 영상 분할 워터쉐드 변한은 영상을 빨리 분할하여 동일한 영역으로 만들기 위해 사용하는 영상처리 알고리즘이다. 영상이 위상적 입체감을 보여준다는 아이디어에서 착안하였으며 영상 분할을 위해 정의된 마커 집합을 사용하게 된다. 워터쉐드 함수는 마커 기반 영상 분할을 수행하게 된다. CV_8UC3인 8비트 3채널 컬러 영상 image에 사용자가 대략적으로 32비트 정수 1-채널 markers에 부분영역을 설정하면 영상을 분할하여 markers 행렬에 저장한다. 초기에 markers에 주어진 영역의 값을 씨앗(seed)으로 하여 나머지 영역을 분할한다. 함수가 반환 될 때 markers에 1 이상의 값을 가지며 markers의 값이 같으면 동일 특성을 갖는 분할 영역이며, ..
2017.01.18
no image
[OpenCV] pyrMeanShiftFiltering 적용하여 영상분할
pyrMeanShiftFiltering에 의한 피라미드 기반 영상 분할 (color segmentation) 피라미드(Pyrimid) 영상 일단 이 함수를 영상에 적용시키기에 앞서 피라미드 기반 영상분할에 대하여 알아야 한다. 피라미드 생성은 각각 축소와 확대로 나타난다. pyrDown 함수 같은 경우 오리지널 영상에 가우시안 필터링을 한 후, 결과영상 사이즈를 축소한다. 보통 디폴트 값은 가로, 세로 각각을 1/2배 크기로 축소하는 것을 적용한다. 즉 Size((src.cols+1)/2, (src.rows+1)/2)가 된다. pyrUp 함수는 마찬가지로 영상에 가우시안 필터링을 적용하여 주어진 크기로 결과영상을 확대하게 된다. 디폴트는 가로, 세로 각각 2배 크기로 확대하게 된다. 즉 Size(src...
2017.01.17
no image
[OpenCV] MOG2 함수를 이용한 배경추출
안녕하세요 오랜만에 티스토리 포스팅을 해요. 포스팅을 하는 주된 목적이 하루 또는 일주일 동안 공부한 내용을 정리하는 목적 그리고 공유하는 목적으로 썼었는데 요 며칠간 공부만하느라고, 정리를 못했네요. 정리를 안하니 머리에 남는 것도 없고 다시 정리를 하자는 마음으로 포스팅을 오랜만에 해요. 배경추출 알고리즘을 찾던 도중 OpenCV에 내장되어있는 MOG2 함수를 써보게 되었어요. OpenCV 3.1 도큐멘트에 있는 내용을 참고하여 작성하였습니다. MOG2의 기본 원리는 다음과 같습니다. 현재 프레임(currentframe)과 객체를 추출하기 위한 배경 모델(background model)의 차영상(substraction)을 구하여 Thresholding을 하여 foreground mask를 구하는 것입..
2017.01.17