Programming/DIP
[OpenCV] Desired Data Type : ddtype
OpenCV에서 filter등의 함수에서 주로 등장하는 ddtype parameter는 결과 image의 data type을 의미한다. desired data type이라고도 불리고 이를 줄여서 ddtype라고 기재하는데, 일반적으로 input image와 같은 data type을 유지하도록 -1을 사용하는 경우가 많다. 이 방식은 대부분 큰 문제가 없지만, gradient나 laplacian을 구하는 filter 연산의 경우, 음수값을 결과로 가질 수 있는데 OpenCV에서 image를 나타내기 위해 사용하는 기본 데이터 타입이 np.uint8 (or cv2.CV_8U)이기 때문에 -1로 ddtype를 지정할 경우 문제가 발생한다. 이는 음수를 고려하지 않은 cv2.CV_8U는 음수값의 gradient..
[DIP] opencv 에서 H264 encoding error
colab등에서 video를 재생시키는 처리를 하다가 계속 에러가 나서 헤맸다. HTML5에서 표준 비디오인코딩이 H264라 fourcc = cv2.VideoWriter_fourcc(*'H264')로 계속 처리를 했는데... 계속 정상동작을 안하는 문제에 봉착... 새로 테스트하던 부분만 신경쓰느라, cv2.VideoWriter instance가 아예 open이 안된 것을 놓쳤고 때문에 엄한 시간을 날렸다. 비디오는 잘 안다루다보니... 일단 현재 opencv의 python binding은 기본으로 H264 encoding을 제공하지 않는다. GPL 때문... If you installed this package via pip install opencv-python then there..
[DIP] Kornia 소개
https://github.com/kornia/kornia GitHub - kornia/kornia: Open Source Differentiable Computer Vision Library Open Source Differentiable Computer Vision Library - GitHub - kornia/kornia: Open Source Differentiable Computer Vision Library github.com Kornia는 PyTorch를 위한 differentiable computer vision library 이다. 일반적인 computer vision problem들을 해결할 수 있는 다양한 함수와 differentiable module들로 구성되어 있다. 기본적으로 P..
[DIP] Dithering
다음은 wikipedia의 정의임. Dither is an intentionally applied form of noise used to randomize quantization error, preventing large-scale patterns such as color banding in images. Dither is routinely used in processing of both digital audio and video data. 즉, 의도적으로 삽입된 noise인데 이를 사람이 보거나 들을 때, quantizaiton error를 randomize하여 최소화된 qunantization error를 느끼게 하는 것이다. 실제로 256 단계의 gray-scale이미지를 0,1의 binary im..
[DIP] Image Format (summary)
BMP 비트맵(bitmap) 방식. extension(확장자)가 bmp임. 압축도 가능하나 주로 압축되지 않는 방식으로 많이 사용됨. pixel 들을 2-Dimension(이차원)으로 정렬하여 표현 각각의 픽셀은 정수를 component로 가지는 vector로 표현되는 고유의 색을 갖고 있다 예를 들어 8 bit bmp image는 픽셀의 color 혹은 intensity를 나타내기 위해 8자리의 이진수를 사용. 8 bit channel의 경우, 256가지의 intensity 중 하나의 값을 pixel이 가지게 됨. (0~255) width, height, channel로 구성되는게 일반적이며, channel은 depth라고도 불리기도 하고, RGB color space를 통해 색을 표현. 즉, chan..
[DIP] Deconvolution: Richardson-Lucy deconvolution algorithm
Deconvolution : Richardson-Lucy deconvolution algorithmImage Restoration의 대표적인 예이기도 함. Blurring을 결정하는 PSF (blur kenel이라고도 불림)가 알려진 경우 사용되는 non-blind deblurring algorithm의 대표적 기법.The algorithm is based on a PSF (Point Spread Function), where PSF is described as the impulse response of the optical system.The blurred image is sharpened through a number of iterations, which needs to be hand-tuned.단점..
[NumPy] Fancy Indexing & Combined Indexing
NumPy에서 indexing은 4가지 방식을 따름.scalar를 이용한 indexing ( simple indexing ) : array[0]slicingboolean mask : array[array > 1]fancy indexing : vectorized indexing. index들을 element로 가지는 array를 넘겨줌.combined indexing : 앞서 4가지가 조합된 indexingFancy Indexingimage(or matrix)등에서 높이 (row, height), 넓이 (column, width)에 대해,접근하고자하는 pixel (or entry)들의 index를square bracket안에 넘겨주는 방식임.주의할 점은 fancy indexing으로 넘겨지는 array의 ..
[DIP] OpenCV : Region of Interest (ROI) : Callback으로 구현.
cv2.selectROI가 아닌 이벤트 핸들러(MouseCallback)를 이용한 구현임.x button (or close button)을 지원하기 위한 구현을 추가.x 키를 누를 경우, roi를 보여주는 창만 닫히도록 처리함.esc 키를 누를 경우, 프로그램 종료.import cv2import numpy as npis_dragging = Falsex0,y0 = -1,-1w0,h0 = -1,-1red = (0,0,255)exit_roi = Falseimport osd_path = os.path.dirname(__file__)f_path = os.path.join(d_path,"lena.png")def onMouse(event, x, y, flags, param): global is_dragging ..
[DIP] opencv : Region of Interest (ROI) : cv2.selectROI
cv2에서 사각형의 ROI를 선택하는 가장 쉬운 방법. Signatureret_val = cv2.selectROI( [window_name], img [, showCrossHair=True, fromCenter=False] )window_name : ROI 선택을 수행할 window이름. strimg : 보여질 이미지.showCrossHair : ROI 중심에 십자모양 표시 여부fromCenter : 마우스 시작지점을 영역의 중심으로 간주ret_val = (x,y,w,h) of ROISample codeimport cv2import numpy as npimport osd_path = os.path.dirname(__file__)img_path = f'{d_path}/lena.pn..
[NumPy] Broadcasting
ndarray와 scalar를 연산시킬때, scalar를 상대 ndarray와 같은 shape이면서 해당 scalar의 값을 가진 ndarray로 변경시키고나서 이 scalar로부터 만들어진 ndarray와 상대 ndarray를 동작시키는 방식으로 elementwise연산이 수행되는 기능. 주의할 것은 scalar 를 확장시키는 것이 기본이라는 점임. PyTorch나 TensorFlow의 텐서도 같은 방식으로 broadcasting이 수행된다. 이를 정리하면 다음과 같은 Rule에 따른다고 생각할 수 있음. Rules of Broadcasting Rule 1 두 ndarray의 차원의 수(number of dimensions)가 같지 않을 경우, 적은 ndarray의 shape가 leading side쪽..