Image Processing (13) 썸네일형 리스트형 [영상처리/C++/OpenCV] Calibration 카메라 캘리브레이션을 공부하고 코드실습을 진행해 보았습니다. Calibration 실제 눈으로 보게되는 세상은 3차원으로 이루어져 있지마나 카메라를 통해 얻는 이미지는 2차원으로 구성되어있습니다. 3차원의 점들이 2차원 이미지 상에서 어디에 투영되는지는 당시의 카메라의 위치 및 방향 사용되는 렌즈, 렌즈와 이미지 센서와의 거리, 렌즈와 이미지 센서가 이루는 각 등 카메라 내부의 영향을 크게 받습니다. 내부적인 영향을 줄여 3차원 -> 2차원, 2차원 -> 3차원으로의 정확한 계산을 하기 위해 내부 요인의 파라미터 값을 구하는 과정을 Calibration이라고 합니다. 2차원 이미지는 3차원 공간상의 점들을 perspective projection을 통해 얻어집니다. 핀홀 카메라 모델에서는 3차원 점들이 .. [영상처리/C++/OpenCV] CannyEdge detection & RealSense 이번 시간에는 CannyEdge 감지 기법과 RealSense 카메라를 사용해 보았습니다. CannyEdge detection 말 그대로 가장자리, 경계선을 찾는 알고리즘 입니다. 알고리즘은 4단계로 구성되어 있습니다. 이미지 노이즈 제거 Sobel filtering NMS Double thrsing --> edge tracking by htsteresis 일반적으로 이미지에 생기는 가우시안 노이즈를 제거하기위해서 가우시안 필터를 활용합니다. NMS에서 gradinet를 활용할 것이기 때문에 노이즈가 gradient를 계산하는데 있어서 매우 큰 방해 요소가 됩니다. sobel filter는 가로, 세로 상의 픽셀 값의 변화를 통해 영역의 경계면을 검출하는 필터입니다. 1차 미분 sobel mask를 활용.. [영상처리/C++/OpenCV] Haar Cascade Haar Cascade 알고리즘을 공부하고 코드실습을 진행해 보았습니다. Haar Cacased Haar casaced 는 머신러닝 기반의 face detection 기법입니다. 알고리즘은 크게 3단계로 구성되어 있습니다. Haar Feature 선택 --> Integral images 생성 Adaboost 학습 진행 Cascading Classifiers를 통한 얼굴 감지 Haar feature Haar feature는 밝기 값의 차, 즉 명암의 차이를 통해서 feature를 추출합니다. 눈 특징점을 뽑을 때 눈썹 밑 부분은 그늘이 지기 때문에 더 어두울 수 밖에 없습니다. 그런 특징을 filter를 이용해서 추출해 줍니다. 모든 영역에 대해서 filter를 연산해서 feature를 획득합니다. fil.. [영상처리/C++/OpenCV] 비디오 재생, cvtColor(), Histogram 비디오의 입,출력과 cvtColor, Histogram을 공부했습니다. opencv에서는 연속된 이미지를 출력하는 방법이 2가지가 있습니다. 웹캠의 입력을 통해 frame을 시각화하기, 이미 저장된 동영상파일을 출력하기가 있습니다. 비디오의 입,출력 VideoCapture 클래스를 통해서 각 frame에 대한 정보를 받아 올수 있습니다. 인터넷 동영상, 비디오 스트림을 URL로 지정해서 불러오는 것도 가능합니다. 웹캠, 동영상으로 구분지어 설명하겠습니다. 웹캠의 경우 index를 활용하여 입력을 받아옵니다. 카메라가 여러대 설치 되어 있을 경우 index로 카메라를 선택 할 수 있습니다. cv::VideoCapture cap(1); if (!cap.isOpened()) { cout [영상처리/C++/OpenCV] imread, imshow 를 통한 이미지 파일 시각화 C++ 언어의 OpenCV 라이브러리르 활용해서 이미지를 시각화 해보겠습니다. 기존에는 tool을 사용해서 이미지를 시각했었는데요, OpenCV 라이브러리를 사용하면 정말 간편하게 이미지를 시각화 할 수도 있습니다. 사실 이전에 작업했던 과정도 OpenCV를 사용했다면 훨씬 쉽게 진행 할 수 있었습니다. OpenCV는 컴퓨터 비전을 공부하는데 있어 정말 편리하고, 많은 영상처리 기법을 함수화해서 가지고 있습니다. Python과 C++에서 사용 될 수 있으며 기본적인 이미지 읽기, 출력해보기 부터 시작해보겠습니다. imread cv::imread(const String & filename, int flags = IMREAD_COLOR) 이미지를 읽는 함수 입니다. C에서 raw 파일을 읽을 때 사용하던 o.. [영상처리/C언어] Disparity Estimation (DE) Disparity Estimation Disparity Estimation은 말 그대로 disparity를 추정하는 기법입니다. Disparity(시차)는 두 이미지내에서 x축의 차이라고 볼 수 있습니다. 즉, 이 disparity는 지난 시간의 ME에서의 motion vector를 생각해 주면 되는데 가정이 필요합니다. 두 영상의 높이가 동일해야 한다는 점입니다. 즉, 카메라가 높이의 변화 없이 촬영하여 얻은 이미지에서의 차이를 말합니다. 이 개념은 스테레오 카메라 통해 깊이를 추정할 때 사용되는 개념입니다. 정합을 disparity map에 대해 잘 설명해주신 페이지 입니다. https://blog.naver.com/dldlsrb45/220879295400 이 disparity를 추정하는 방법은 앞서.. [영상처리/C언어] Motion Estimation (ME) 이번에는 Motion Estimation에 대한 공부를 해보았습니다. Motion Estimation (ME) 연속된 이미지 즉, 비디오상에서 현재의 frame과 이전의 frame의 차이 정보 를 이용해서 비디오의 압축 또는 전송 과정 중 2개의 frame을 사용하는 것보다 적은 용량을 사용할 수 있게 하는 기법입니다. 다시 정리하자면, - 동영상의 경우에 연속된 frame 간의 차이가 크지 않습니다. - 위 사실을 바탕으로 이전 frame과 현재 frame의 차이 정보를 획득합니다. - 이전,현재 frame의 정보를 보내는 것보다 이전, 현재와의 차이정보를 보내는 것이 더 적은 용량을 사용합니다. ME를 하기 위해서는 frame을 여러 개의 block으로 구분합니다. Block의 크기는 임의로 지정할 .. [영상처리/C언어] DCT(Discrete Cosine Transform) 영상 처리에서는 처리 공간은 크게 공간영역, 주파수 영역이있습니다. 이번 시간에는 주파수 영역에서 처리하기 위해 이미지를 주파수 영역으로 변환 시키고 시각화 해보는 것을 진행해 보겠습니다. 이미지는 디지털 영상으로 디지털 신호로 구분됩니다. 따라서 주파수 도메인으로 변경을 위해 주로 DCT를 사용합니다. 하지만 저는 DCT를 사용할 계획입니다. DCT DCT는 FT(Fourrier Transform)의 변형으로 cosine 성분만을 가지고 변환을 진행합니다. 기존의 DFT는 sine과 cosine 정현파로 구분했지만 sine성분의 크기가 무시해도 될 정도로 작으며 연산의 복잡도를 감소 시키기 위해 cosine 성분만 사용한 FT를 적용합니다. 왜 주파수 영역에서 처리를 하느냐? 신호 처리과정은 주파수 영.. 이전 1 2 다음