카테고리 없음
비전 2-2) 모폴로지, 컬러
두원공대88학번뚜뚜
2021. 12. 15. 12:03
노이즈 제거, 구멍 채우기, 끊어진 선 이어 붙이기 등의 연산에 쓰인다.
검은색과 흰색으로 구성되어 있는 바이너리 이미지에 사용.
1) 침식
이미지 깎아내리기.
다양한 모양의 0, 1로 구성된 커널을 사용해, 이를 입력 이미지에 적용한다.
어떤 이미지위 픽셀에 커널을 올려놨을 때, 커널이 이미지에 완전히 포개진다면 해당 이미지는 1, 아니면 0
k = cv.getStructuringElement(cv.MORPH_RECT, (3,3))
erased = cv.erode(imggray, k)
#np형태인 imggray와 erased 이미지를 좌우로 합치는 hstack
#상하로 합치려면, vstack을 쓴다
merged = np.vstack((imggray, erased))
cv.imshow('Erased', merged)
직사각형 모양의 3*3 커널을 흑백이미지에 넣어가며, 백색에 해당하는 곳을 양옆 2칸씩 깎는 작업이라 할 수 있다.
2) 팽창
물체의 주변을 확장시킨다. 침식과 반대로, 완전히 겹치지 않으면 1로 변경한다.
k = cv2.getStructureElement(cv2.MORPH_RECT, (3,3))
dst = cv2.dilate(img, k)
merged = np.hstack((img, dst))
만일 백색 이미지 내에 흑색 노이즈가 있다면, 이것이 커널보다 작다는 가정 하에 전부 지워지는 효과가 있다.
3) 열림
침식 후, 팽창 : 주변보다 밝은 노이즈를 제거 or 맞닿아있는 것처럼 보이는 독립된 개체의 분리 or 돌출된 모양 제거
4) 닫힘
팽창 후, 침식 : 주변보다 어두운 노이즈를 제거 or 끊어진 것처럼 보이는 개체의 연결 or 구멍 메우기
k = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
# 열림
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, k)
# 닫힘
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, k)
5) 그 외
그래디언트(팽창 - 침식) = 팽창 적용 후, 침식 연산을 적용한 이미지를 제거시, 경계픽셀만 얻게 된다. 경계검출용
탑햇(원본 - 열림) = 값이 크게 뛰는 '밝은 영역' 강조
블랙햇(닫힘 - 원본) = 값이 크게 어두워지는 부분 강조
k = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
# 그래디언트
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, k)
# 탑햇
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, k)
# 블랙햇
blcakhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, k)
HSI 모델
H : 붉은색으로부터 떨어진 각도
S : 흰색이 섞인 정도(채도)
I : 밝기(명도), 0일 때 흑 / 1일 때 백 / 1/3(r+g+b)