목록Python/영상처리 (13)
Koo's.Co
1. 필터링(filtering) 영상에서 필요한 정보만 통과시키고 나머지는 걸러내는 작업 ① 주파수 영역 필터링(Frequency domain filtering) - 저주파 성분과 고주파 성분을 convolution 연산을 통해 처리 ② 공간적 필터링(Spatial domain filtering) - 영상의 픽셀 값을 직접 이용하는 필터링 방법 - 마스크 연산, convolution 연산을 이용 마스크의 형태에 따라 필터의 역할이 결정됨 영상 부드럽게 만들기 영상 날카롭게 만들기 edge 검출 잡음 제거 ... 2. 공간적 필터링: 마스크 연산 1) 픽셀들을 순환하면서 2) 그 주변값들과 mask값들의 값을 곱하여 3) 새로운 값을 연산 최외곽 픽셀의 경우, 마스크에 해당하는 부분을 대칭으로 넘겨 동일한..
1. 히스토그램 평활화(Histogram Equalization) - 히스토그램이 그레이스케일 전체 구간에서 균일한 분포로 나타나도록 변경하는 명암비 향상 기법 - 히스토그램 균등화, 균일화, 평탄화라고도 한다 - 누적함수를 이용해 입력 영상의 명암비를 조절 픽셀의 히스토그램 분포를 보면 기존 이미지는 좁게 분포해있지만 stretching과 equalization을 적용한 픽셀의 분포는 넓게 분포한 것을 알 수 있다. stretching은 넓어지는 범위가 일정한 반면, equalization은 cdf를 사용하기 때문에 분포에서 값이 뭉쳐있는 범위가 더 넓게 퍼지게 된 것을 확인할 수 있다. 2. 컬러 영상 Histogram Equalization BGR 색상 영역에서 split을 한 후 equalizat..
1. 히스토그램 분석 - 영상의 픽셀값 분포를 그래프 형태로 표현한 것 - 전체 픽셀의 개수로 나누어 픽셀이 나타날 확률을 구할 수 있음 1) 그래프가 오른쪽으로 치우쳐 있어 상대적으로 밝은 영상 2) 그래프가 왼쪽으로 치우쳐 있어 상대적으로 어두운 영상 3) 그래프가 넓게 분포되어 좀 더 뚜렷한 영상 4) 그래프가 좁게 분포되어 선명도가 떨어지는 영상 cv2.calcHist(images, channels, mask, histSize, ranges, hist=None, accumulate=None) -> hist - images: 입력 영상 리스트 - channels: 히스토그램을 구할 채널 리스트 * grayscale: [0] * BG: [0, 1] * BGR: [0, 1, 2] - mask: 전체 영..
1. 명암비(Contrast) - 밝은 곳과 어두운 곳 사이에 드러나는 밝기 정도의 차이 - 컨트라스트, 대비 - 보통 영상처리를 할 때, 명암비를 높여 영상을 선명하게 만듬 - 글씨나 물체를 좀 더 잘 인식하기 위한 용도로 사용 가능 2. 명암비 조절 - src 이미지에 일정한 가중치를 곱한 후 saturate 연산을 적용 전체적으로 포화가 되는 부분이 많아지거나 최대 밝기가 너무 낮아지는 문제가 있다. import sys import cv2 import numpy as np src = cv2.imread('image.bmp', cv2.IMREAD_GRAYSCALE) if src is None: sys.exit() alpha = 1.0 dst = np.clip((1 + alpha) * src - 128..
1. split BGR로 구성된 영상을 3개의 grayscale 이미지로 나누어 반환함 각 grayscale은 해당 색상 성분이 많을수록 흰색에 가깝게, 적을수록 검정색에 가깝게 표현됨 cv2.split(m, mv=None) -> dst - m: 다채널 영상(B, G, R)로 구성된 영상 - mv: 출력 영상 - dst: 출력 영상 리스트, BGR 순서에 맞는 grayscale 영상을 3개 반환함 2. merge split을 이용해 나눈 3개의 grayscale 영상을 다시 합치는 함수 cv.merge(mv, dst=None) -> dst - mv: 입력 영상 리스트, BGR 순서에 맞는 grayscale 영상 리스트 - dst: 출력 영상 3. cvtColor 영상 색상에 따라 다양한 색영역을 지원함 ..
1. add saturate 연산이 사용되어 포화된 값을 변환시켜 준다 - 최대가 255, 최소가 0 - 최대 밝기 이상인 경우 255로 변환 - 최소 밝기 이하인 경우 0으로 변환 cv2.add(src1, src2, dst=None, mask=None, dtype=None) -> dst - src1: 첫번째 영상 or 스칼라 - src2: 두번째 영상 or 스칼라 - dst: 덧셈 연산 결과 영상 - mask - dtype: 출력 영상 타입: ex) cv2.CV_8U, cv2.CV_32F ... * src의 영상 타입이 다른 경우 출력 영상의 타입을 지정해주어야 한다 * numpy 자료형이 아닌 opencv의 자료형을 사용해야 한다 2. weighted sum cv2.addWeighted(src1, a..
1. ROI(Region of Interest) 연산에서 특정 연산을 수행하고자 하는 임의의 부분 영역 2. 마스크 연산 - openCV는 일부 함수에 대해 ROI 연산을 지원, 마스크 영상을 인자로 함께 전달해야 한다 - 마스크 영상은 cv2.CV_8UC1 (grayscale image) - 마스크 영상의 픽셀값이 0이 아닌 위치에서만 연산이 수행됨 (픽셀 0 = 검정색) - 마스크 영상으로는 0, 255로 구성된 binary image를 사용 3. copyTo cv2.copyTo(src, mask, dst=None) -> dst - src: 입력 영상 - mask: 마스크 영상, cv2.CV_8U (numpy.uint8) - dst: 출력 영상. src와 크기, 타입이 같은 dst를 입력으로 지정하면..
openCV 라이브러리 외에 matplotlib을 이용하여 영상을 출력할 수 있다. 1. 영상 출력 - opencv와 다르게 RGB 순서로 색상 정보를 입력 받음 - cv2.imread()로 불러온 영상의 색상 정보를 BGR->RGB로 바꿔주어야 함 - cv2.cvtColor() 함수를 사용 - 그레이스케일 영상은 plt.im show()에서 cmap='gray'로 지정 import matplotlib.pyplot as plt import cv2 imgBGR = cv2.imread('image.jpg') imgRGB = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB) imgGray = cv2.imread('image.jpg', cv2.IMREAD_GRAY) plt.subplot(1..