D.O.F 원리
오늘의 Image segmentation 간단 개요
Image segmentation
공통적인 특징
이 있다고 가정하고 부여함watershed segmentation
오늘은 Deeplabv3+ 프레임워크가 이용된 Pixellib
의 semantic segmentation 기법을 사용한다.
atrous convolution layer
새로운 패키지
cv2.imread(path)
-> numpy 어레이 반환
plt.imshow()
cv2.cvtColor(넘파이 어레이, cv2.COLOR_BGR2RGB))
사용해서 RGB 순으로 본다(OpenCV는 기본적으로 BGR...)segmentation 모델 다운로드
urllib.request.urlretrieve(model_url, model_path)
하면 url에서 명시된 path로 다운받기 함segmentation 모델 생성
- model = semantic_segmentation() model.load_pascalvoc_model(model_file)
- 이 때 pascal voc 데이터로 학습시킨 모델 가져 옴
segvalues, output = model.segmentAsPascalvoc(img_path)
dict
에 담겨서 반환되고(segvalues
)output
)가 추가로 반환된다.segmentation된 물체들과, 해당 물체들의 진짜 라벨, 그리고 색상 확인하기
colormap[15] >>> array([192, 128, 128])
이면seg_color = (128,128,192)
로 따로 변수 할당마스킹 이미지 만들기
이 때 색상(seg_color
)을 사용해서 해당 색상으로 된 부분을 마스킹된 이미지(혹은 어레이라고 볼 수 있음)에서 추려낸다.
방법은 (세로, 가로, 채널) shape을 가지던 어레이에
채널
부분에 seg_color를 np.all(output==seg_color, axis=-1)
함으로써 어레이를 0과 1이 담긴 (세로, 가로) 2dim 어레이로 만들어 버린다.(이미지로 보면 흰색, 검정색만 나옴)
해당 흰색, 검정색 어레이와 원본 이미지를 잘 섞어서 segmentation이 잘됐는지 확인
이후 원본 이미지는 blur()
함수로 전체 blur 처리
이제 sementation mask와 blur 처리된 사진에 bitwise로 배경만 뽑아내기
cv2.bitwise_not()
사용)cv2.bitwise_and()
로 공통 부분만 골라내고 사람은 검정색 처리그리고 np.where()
함수를 통해 합성