일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- evaluating object hallucination in large vision-language models 논문
- 원격 학습 안끊기게
- dinov2: learning robust visual features without supervision
- evaluating object hallucination in large vision-language models paper
- 1차 미분 마스크
- clip
- 에지 검출
- vlm 환각이란
- 딥러닝 목적함수
- vlm
- 딥러닝 엔트로피
- evaluating object hallucination in large vision-language models
- polling-based object probing evaluation
- vlm hallucination
- mobilenetv1
- dinov2 논문 리뷰
- 기계학습
- clip adapter
- object detection
- dinov2: learning robust visual features without supervision 논문
- Object detection article
- 논문 요약
- 이미지 필터링
- 객체 검출
- blip-2
- 논문 리뷰
- dinov2: learning robust visual features without supervision 논문 리뷰
- vlm hallucination paper
- 엔트로피란
- vlm 환각
- Today
- Total
My Vision, Computer Vision
[딥러닝 공부] 노이즈 제거를 위한 이미지 필터링(평균, 미디언, 가우시안) 본문
이 글은
『정성환, 배종욱, OpenCV-Python으로 배우는 영상 처리 및 응용, 생능출판2020년)』
에서 공부한 내용을 토대로 작성되었다.
https://mvcv.tistory.com/39이 글에서 이어집니다.
모폴로지
모폴로지는 형태학이란 뜻으로서 다양한 학문 분야에서 사용되는 용어이다.
영상 처리에서 모폴로지는 영상의 객체들의 형태(shape)을 분석하고 처리하는 기법이다.
이 형태학적 처리를 활용하여 영상의 경계, 골격, 블록 등의 형태를 표현하는데 필요한 요소를 추출한다.
침식 연산(Erosion operation)
침식 연산은 객체를 침식시키는, 깎는 연산이다. 객체의 크기는 축소되고 배경은 확장된다.
따라서 잡음 같은 작은 객체들은 사라질 수 도 있다.
따라서 소금-후추 잡음과 같은 임펄스 잡음들을 제거할 수 있다. 침식 연산 마스크는 OR연산을 사용한다.
0 | 1 | 0 |
1 | 1 | 1 |
0 | 1 | 0 |
침식, 팽창 연산은 주로 이진 연산에서 사용되는데, 마스크에서 1에 해당하는 부분(십자가 모양)과 하나라도 겹치지 않으면 0으로 출력되고 모두 겹치면 1로 출력된다.
즉 1이 많은 영역은 그대로 1로 유지되고, 1이 적은 영역은 0으로 바뀌게 된다.
# 글자 이미지 생성
text_image = np.zeros((100, 300), dtype=np.uint8)
cv2.putText(text_image, 'HELLO', (50, 70), cv2.FONT_HERSHEY_SIMPLEX, 2, 255, 5, cv2.LINE_AA)
# 바이너리 이미지로 변환
binary_image = (text_image > 0).astype(np.uint8)
# 소금-후추 노이즈
salt_prob = 0.05
pepper_prob = 0.05
noisy_image = add_salt_pepper_noise(binary_image, salt_prob, pepper_prob)
# 침식 연산
kernel = np.ones((3, 3), np.uint8)
eroded_image = cv2.erode(noisy_image, kernel, iterations=1)

첫번째 이미지는 원본 이미지이고 두번째 이미지는 원본 이미지에 잡음을 생성한 것이다.
이 이미지에 대해서 침식 연산을 수행하면 세번째 이미지와 같이 출력된다.
배경은 0(검정색), 글자는 1(흰색)로 이루어져 있고 글자 안에 있는 잡음은 0(검정색)으로 되어있다.
이 때 침식 연산을 수행하면 배경에 있는 1의 값을 가지는 잡음은 모두 크기가 작기 때문에 없어지게 되고, 글자 안에 있는 잡음은 커지게 된다.(0의 영역이 넓어지므로)
팽창 연산(Dilation opertaion)
팽창 연산은 침식 연산과 반대로 객체가 차지하는 영역을 더 많아지게 만든다. 즉 객체가 팽창하게 되고 배경은 축소된다.
0 | 1 | 0 |
1 | 1 | 1 |
0 | 1 | 0 |
팽창 연산의 마스크는 침식 연산과 동일하지만 연산 과정이 반대이다. 침식 연산은 마스크와 모두 겹쳐야만 1이 출력되지만 팽창 연산은 하나라도 겹치면 1이 출력된다.
# 글자 이미지 생성
text_image = np.zeros((100, 300), dtype=np.uint8)
cv2.putText(text_image, 'HELLO', (50, 70), cv2.FONT_HERSHEY_SIMPLEX, 2, 255, 5, cv2.LINE_AA)
# 바이너리 이미지로 변환
binary_image = (text_image > 0).astype(np.uint8)
# 소금-후추 노이즈
salt_prob = 0.05
pepper_prob = 0.05
noisy_image = add_salt_pepper_noise(binary_image, salt_prob, pepper_prob)
# 팽창 연산
kernel = np.ones((3, 3), np.uint8)
dilated_image = cv2.dilate(noisy_image, kernel, iterations=1)

위 이미지들은 원본 이미지에 팽창 연산을 적용한 이미지이다.
글자 안에 있는 잡음은 모두 사라졌지만 배경에 있는 잡음은 커졌다.
열림 연산과 닫힘 연산(Open, Closing)
열림 연산과 닫힘 연산은 팽창과 침식 연산의 순서를 다르게 적용한 연산이다.
열림 연산은 침식→팽창 순서이고 닫힘 연산은 팽창→침식 순서이다.
열림 연산은 침식 연산이 먼저 적용되기 때문에 객체는 축소되고, 배경의 잡음은 제거된다.
이후 팽창 연산을 통해 축소되었던 객체가 원래 크기로 돌아간다.
다만 돌출된 부분은 제거된 후 원래 크기로 돌아가지 않는다.
닫힘 연산은 팽창 연산을 먼저 수행하고 침식 연산을 수행한다.
팽창 연산으로 객체가 확장되면서 객체 내 잡음이 메워진다.
다음으로 침식 연산이 수행되어 객체가 다시 원래 크기로 축소된다.
열림 연산은 침식→팽창이기 때문에 객체 내의 잡음이 완전히 제거되지 않는다.
반대로 닫힘 연산은 팽창→침식이기 때문에 배경의 잡음이 완전히 제거되지 않는다.
'공부' 카테고리의 다른 글
[딥러닝 공부] 딥러닝 최적화1 - 목적 함수 (0) | 2025.01.03 |
---|---|
[딥러닝 공부] 딥러닝 기초(다층 퍼셉트론 오류 역전파 이론) (1) | 2025.01.02 |
[딥러닝 공부] 노이즈 제거를 위한 이미지 필터링(평균, 미디언, 가우시안) (0) | 2024.12.30 |
[딥러닝 공부] 1차, 2차 미분 마스크, 에지 검출 (0) | 2024.12.24 |
[딥러닝 공부] 이미지 샤프닝, 블러링, 1차 미분 마스크 (1) | 2024.12.20 |