이미지 노이즈 제거
8824 단어 신인 프로그래머 응원파이썬OpenCV초보자이미지 처리
소개
안녕하세요!
이번에는 화상에 들어간 노이즈의 제거 등 화상 처리에 대해 써 보려고 생각합니다.
세그멘테이션을 위해 전처리를 하면 쓸데없는 노이즈가 들어가 곤란했다! 무슨 때에 사용할 수 있으므로 참고해보십시오.
이번에 사용할 이미지

이번에 사용하는 것은이 이미지입니다.
노이즈 투성이의 2치 화상을 만들어 보았으므로, 지금부터 이러한 노이즈를 조금씩 지워 가려고 생각합니다.
OpenCV를 사용하기 때문에 아직 설치하지 않은 분은 설치를 부탁드립니다.
중앙값 필터
첫 번째는 "중앙 값 필터"입니다.
이것은 이번과 같은 세세한 노이즈(통칭 참깨 소금 노이즈)라고 불리는 노이즈를 지우고 싶을 때에 최적입니다.
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("./test.png")
# アパーチャーサイズ 3, 5, or 7 など 1 より大きい奇数。数値が大きいほどぼかしが出る。
ksize=3
#中央値フィルタ
img_mask = cv2.medianBlur(img,ksize)
plt.imshow(img_mask)
그러면 이런 이미지가 됩니다.

아직 소음이 남아 있네요.
그래서 커널 사이즈를 점점 크게 해 봅시다. 여기서 주의입니다만, 커널 사이즈는 1보다 큰 홀수가 아니면 안됩니다.
ksize = 15로 시도합니다.

이것으로 완전히 참깨 소음이 사라졌습니다.
여러분이 자전의 이미지를 사용할 때도 조금씩 ksize를 바꾸어, 그 때마다 확인하도록 해 보세요.
팽창·수축
두 번째는 "팽창 · 수축"입니다.
이들도 OpenCV의 기능이며, 팽창 처리는 백색(255)의 영역을 팽창시키고, 수축 처리는 백색(255)의 부분을 수축시키는 처리입니다.
이해하기 어렵다고 생각하기 때문에 실제로 해 봅시다.
여기서, 수축 처리를 한 후에 같은 횟수만큼 팽창 처리를 하는 것을 「오프닝 처리」, 팽창 처리를 한 후에 같은 횟수만큼 수축 처리를 할 무렵을 「클로징 처리」라고 합니다.
전자는 흰색 노이즈 제거, 후자는 검은 색 노이즈 제거에 도움이됩니다.
오프닝 처리
우선은 오프닝 처리를 해 갑니다.
import numpy as np
import cv2
import matplotlib.pyplot as plt
# 膨張・収縮処理
img = cv2.imread("./test.png")
# 近傍の定義
neiborhood = np.array([[0, 1, 0],[1, 1, 1],[0, 1, 0]],
np.uint8)
# 収縮
img_erode = cv2.erode(img,neiborhood,iterations=10)
# 膨張
img_dilate = cv2.dilate(img_erode,neiborhood,iterations=10)
plt.imshow(img_erode)
수축 처리를 한 후의 이미지가 이것입니다.

확실히 흰 참깨 소금은 사라지고 있지만, 흰색 부분이 수축했기 때문에 검은 부분이 상대적으로 커지고 있습니다.
그래서 다음은 팽창 처리를 추가합니다.
그 후의 이미지가 이쪽

아까보다는 검은 부분이 작아졌습니다!
그렇지만 아직 부족하기 때문에, iterations의 개소를 10보다 크게 하면, 보다 깨끗하게 검은 노이즈가 사라지므로 해 보세요.
폐쇄 처리
조금 전의 반대입니다.
import numpy as np
import cv2
import matplotlib.pyplot as plt
# 膨張・収縮処理
img = cv2.imread("./test.png")
# 近傍の定義
neiborhood = np.array([[0, 1, 0],[1, 1, 1],[0, 1, 0]],
np.uint8)
#膨張
img_dilate = cv2.dilate(img,neiborhood,iterations=10)
#収縮
img_erode = cv2.erode(img_dilate,neiborhood,iterations=10)
plt.imshow(img_dilate)
그러면 이러한 이미지가 표시됩니다.

흰색 부분이 팽창하여 검은 부분이 빗나가고 있습니다만, 흰색 노이즈가 커져 버리고 있습니다.
그래서 수축 처리를 추가하면 이렇게 됩니다.

이렇게 하얀 소음이 작아졌습니다!
방금전과 같이 iteration을 크게 하면 더욱 깨끗하게 사라집니다만, 이쪽이 효과를 알기 쉽기 때문에 지금은 양해 바랍니다.
끝에
어땠어?
이번 노이즈 처리는 세그멘테이션을 위해 노력해 색칠을 한 사람을 위해 있는 것 같습니다.
색칠했는데 뭔가 이상한 노이즈가 들어갔다. . . 무슨 때에 활용해 주세요.
마지막으로, 의학생인 제가 소속하고 있는 츠카자키 병원 안과 AI팀의 페이지도 봐 주시면 다행입니다! 꼭 봐 주세요!
츠카자키 병원 안과 AI 팀 DeepOculus
그럼 다음 기사에서!
Reference
이 문제에 관하여(이미지 노이즈 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/cr-fun/items/916c266ee3e51621ec73
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("./test.png")
# アパーチャーサイズ 3, 5, or 7 など 1 より大きい奇数。数値が大きいほどぼかしが出る。
ksize=3
#中央値フィルタ
img_mask = cv2.medianBlur(img,ksize)
plt.imshow(img_mask)
두 번째는 "팽창 · 수축"입니다.
이들도 OpenCV의 기능이며, 팽창 처리는 백색(255)의 영역을 팽창시키고, 수축 처리는 백색(255)의 부분을 수축시키는 처리입니다.
이해하기 어렵다고 생각하기 때문에 실제로 해 봅시다.
여기서, 수축 처리를 한 후에 같은 횟수만큼 팽창 처리를 하는 것을 「오프닝 처리」, 팽창 처리를 한 후에 같은 횟수만큼 수축 처리를 할 무렵을 「클로징 처리」라고 합니다.
전자는 흰색 노이즈 제거, 후자는 검은 색 노이즈 제거에 도움이됩니다.
오프닝 처리
우선은 오프닝 처리를 해 갑니다.
import numpy as np
import cv2
import matplotlib.pyplot as plt
# 膨張・収縮処理
img = cv2.imread("./test.png")
# 近傍の定義
neiborhood = np.array([[0, 1, 0],[1, 1, 1],[0, 1, 0]],
np.uint8)
# 収縮
img_erode = cv2.erode(img,neiborhood,iterations=10)
# 膨張
img_dilate = cv2.dilate(img_erode,neiborhood,iterations=10)
plt.imshow(img_erode)
수축 처리를 한 후의 이미지가 이것입니다.

확실히 흰 참깨 소금은 사라지고 있지만, 흰색 부분이 수축했기 때문에 검은 부분이 상대적으로 커지고 있습니다.
그래서 다음은 팽창 처리를 추가합니다.
그 후의 이미지가 이쪽

아까보다는 검은 부분이 작아졌습니다!
그렇지만 아직 부족하기 때문에, iterations의 개소를 10보다 크게 하면, 보다 깨끗하게 검은 노이즈가 사라지므로 해 보세요.
폐쇄 처리
조금 전의 반대입니다.
import numpy as np
import cv2
import matplotlib.pyplot as plt
# 膨張・収縮処理
img = cv2.imread("./test.png")
# 近傍の定義
neiborhood = np.array([[0, 1, 0],[1, 1, 1],[0, 1, 0]],
np.uint8)
#膨張
img_dilate = cv2.dilate(img,neiborhood,iterations=10)
#収縮
img_erode = cv2.erode(img_dilate,neiborhood,iterations=10)
plt.imshow(img_dilate)
그러면 이러한 이미지가 표시됩니다.

흰색 부분이 팽창하여 검은 부분이 빗나가고 있습니다만, 흰색 노이즈가 커져 버리고 있습니다.
그래서 수축 처리를 추가하면 이렇게 됩니다.

이렇게 하얀 소음이 작아졌습니다!
방금전과 같이 iteration을 크게 하면 더욱 깨끗하게 사라집니다만, 이쪽이 효과를 알기 쉽기 때문에 지금은 양해 바랍니다.
끝에
어땠어?
이번 노이즈 처리는 세그멘테이션을 위해 노력해 색칠을 한 사람을 위해 있는 것 같습니다.
색칠했는데 뭔가 이상한 노이즈가 들어갔다. . . 무슨 때에 활용해 주세요.
마지막으로, 의학생인 제가 소속하고 있는 츠카자키 병원 안과 AI팀의 페이지도 봐 주시면 다행입니다! 꼭 봐 주세요!
츠카자키 병원 안과 AI 팀 DeepOculus
그럼 다음 기사에서!
Reference
이 문제에 관하여(이미지 노이즈 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/cr-fun/items/916c266ee3e51621ec73
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(이미지 노이즈 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cr-fun/items/916c266ee3e51621ec73텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)