Image Processing

박광욱·2023년 1월 16일
0

Computer Vision

목록 보기
3/8

📕 이미지 블랜딩

✍ 이미지 블랜딩이란?

  • 두장의 이미지가 있으면 하나의 이미지로 섞는 것.

✍ 같은 크기의 이미지 블랜딩

addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) -> dst

💻 결과



같은 크기의 이미지를 블랜딩 할 때에는 addWeighted함수를 사용하면 된다.
dst = α * src1 + β * src2 + γ 의 결과로 나오게 된다.


✍ 다른 크기의 이미지 블랜딩 - 1

img1[y_offset: y_end, x_offset: x_end] = img2

💻 결과

첫 번째 방법으로는 그냥 해당 이미지의 픽셀 값들을 덮어 씌우는 방법이다.
하지만 이는 우리가 원하는 결과 값이랑은 조금 거리가 멀다.


✍ 다른 크기의 이미지 블랜딩 - 2

bitwise_not(src[, dst[, mask]]) -> dst
bitwise_or(src1, src2[, dst[, mask]]) -> dst

💻 결과

두 번째 방법은 첫 번째 방법과는 다르게 매우 복잡한 과정을 거친다.
과정을 설명하기 앞서 bitwise_not 함수는 mask영역 부분의 보색을 출력한다.
bitwise_or 함수는 mask영역과 겹치는 부분을 출력한다.
여기서 강아지 사진을 img1, 경고문 사진을 img2라고 보면
1. img1에 블랜딩 하고 싶은 곳에 img2의 크기만큼 부분을 자른다.
2. img2를 흑백 이미지로 변환한다.
3. bitwise_not 함수를 사용해 반전 시킨다. -> 원하는 정보를 밝은 색으로 만들겠다.
4. 흑백 사진을 3개의 채널(RGB)로 차원을 늘린다.
5. 1번 단계에서 추출한 img1'과 4번 단계에서 만들어진 img2''를 bitwise_or를 사용하여 이미지를 블랜딩한다.


📗 이미지 Threshold 처리

✍ Threshold

threshold(src, thresh, maxval, type[, dst]) -> retval, dst

src : 처리하고 싶은 이미지
thresh : 사용자가 정한 임계 값
maxval : threshold보다 커졌을 때 바꿀 픽셀 값
type : threshold보다 커졌을 때 처리할 알고리즘
1. THRESH_BINARY : 픽셀 값이 threshold보다 커지면 maxval로 설정 작아지면 0
2. THRESH_BINARY_INV : 1번과 반대로 threshold보다 커지면 0 작으면 maxval
3. THRESH_TRUNC : threshold보다 높은 값은 maxval으로 변함, 작은 값들은 원래 값 유지
4. THRESH_TOZERO : threshold보다 큰 값은 그대로 유지, 작은 값들은 0으로 설정
5. THRESH_TOZERO_INV : 4번과 반대


✍ adaptiveThreshold

adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) -> dst

src : 이미지
maxValue : threshold보다 커졌을 때 바꿀 픽셀 값
adaptiveMethod : threshold 구하는 알고리즘
thresholdType : threshold보다 커졌을 때 처리할 알고리즘
blockSize : kernel의 크기


📘 Bluring & Smoothing

✍ filter2D

filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) -> dst

src : 이미지
ddepth : 사용자가 원하는 dst의 깊이 -1이면 src와 dst의 깊이가 같아짐
kernel : filtering을 하기위한 kernel


✍ blur

blur(src, ksize[, dst[, anchor[, borderType]]]) -> dst

src : 이미지
ksize : kernel의 크기

이 함수는 box filter(nomalized)를 사용하기 때문에 kernel의 크기를 입력한다.


✍ GaussianBlur

GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) -> dst

src : 이미지
ksize : kernel 크기
sigmaX : sigma의 크기

가우시안 블러는 sigma가 커지면 커질수록 box filter와 가까워지고 작으면 원본 이미지와 같게 나온다.


✍ medianBlur

medianBlur(src, ksize[, dst]) -> dst

src : 이미지
ksize : kernel 크기

이 함수는 중간 값을 가져오는 함수이므로 kernel의 크기만 정한다.


✍ bilateralFilter

bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]]) -> dst

이 함수는 양방향 필터로 원치않는 노이즈 제거와 엣지를 선명하게 만드는 함수이다.
하지만 이 필터는 다른 필터들보다 속도가 느리다.


📙 Morphology

✍ erode

erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst

src : 이미지
kernel : 사용자 정의 kernel
iterations : 크면 클수록 많이 없어짐

erode는 물체의 경계를 없애는데 사용된다.


✍ morphologyEx

morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst

src : 이미지
op : 적용할 알고리즘
1. MORPH_OPEN
2. MORPH_CLOSE
3. MORPH_GRADIENT
kernel : 적용할 kernel

opening 작업은 먼저 이미지 후면의 노이즈를 제거하는데 효과적이고,
closing은 이미지 전면의 노이즈를 제거하는데 효과적이다.
gradient는 edge를 추출하는데 사용된다.


📕 Gradients

✍ Sobel

Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]]) -> dst

src : 이미지
ddepth : 픽셀의 정확성
dx : x축의 변화 검출
dy : y축의 변화 검출


📗 Histogram

✍ calcHist

calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) -> hist

images : 이미지
channels : Histogram을 구하고 싶은 채널
mask : 이미지에서 Histogram을 구하고 싶은 부분. 전체를 구하고 싶다면 None
histSize : Histogram크기. 전체는 256
ranges : 픽셀 값 범위. 전체는 0, 256


✍ equalizeHist

equalizeHist(src[, dst]) -> dst

src : 이미지

Histogram을 평균화 하는 작업


출처 : OpenCV 및 딥러닝 을 이용한 Computer Vision 파이썬

profile
Vancouver

0개의 댓글