scratch assay1

스크래치 분석 이미지의 분석을 파이썬으로 만들었습니다.
jupyter에서 작업했습니다.
각 단계에서 처리된 결과의 이미지는 다음 명령으로 표시하면서 진행되었습니다.

이미지 표시 코드 정보



이하의 코드를 각 처리 후에 실행해, 매번 화상의 확인을 실시했습니다.

scratch.py
#データ解読 (hoge:各処理で返されるオブジェクト)
decoded_bytes = cv2.imencode(".png", hoge)[1].tobytes()
#Image関数
Image(decoded_bytes)

① 라이브러리 가져오기



scratch.py
import cv2
import math
import numpy as np

②이미지 불러오기



scratch.py
(hoge:画像が入ってるフォルダ名)
img_src = cv2.imread("C:/Users/hoge/image.jpg", 1) #入力画像(カラー)の読み込み
#img_src = cv2.imread("C:/Users/hoge/image.jpg", 0) #入力画像(白黒)の読み込み



③엣지를 검출(canny법)



scratch.py
img_dst = cv2.Canny(img_src, 30, 100) #出力画像 = cv2.Canny(img_src, 閾値1, 閾値2)



④이미지 흐리게 (평활화, blur)



우선 13회 반복

scratch.py
i=0
while i < 13:
    img_dst2 = cv2.GaussianBlur(img_dst, (11, 11), 1)
    i = i + 1



⑤ 수축처리(erode)와 팽창처리(dilate)



scratch.py
#8近傍指定の行列を作成
element8 = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]], np.uint8) 

#一回膨張処理
img_dst3 = cv2.dilate(img_dst2, element8, iterations = 1) 

#5回収縮処理
i = 0
while i < 5:
    img_dst3 = cv2.erode(img_dst3, element8, iterations = 1)
    i = i + 1

#5回膨張処理        
i=0
while i < 5:
    img_dst3 = cv2.dilate(img_dst3, element8, iterations = 1)
    i = i + 1




⑥2치화



scratch.py
thresh = 60
ret, img_dst4 = cv2.threshold(img_dst3, thresh, 255, cv2.THRESH_BINARY)
#出力画像 = cv2.thresh(img_src, 閾値, 最大値、閾値処理の種類)
#処理の種類(THRESH_BINARY_INV、THRESH_TRUNC、THRESH_TOZERO、THRESH_TOZERO_INV)



⑦흑백 반전


img_dst5 = 255 - img_dst4



⑧면적 산출 패턴 1



흰색 부분의 픽셀을 계산하는 패턴

scratch.py
cv2.countNonZero(img_dst5)

결과
9895

⑨면적 산출 패턴 2



윤곽을 감지하여 둘러싸인 부분의 면적을 모두 계산하여 (모든 영역의 레이블도 됨) 합계 또는 최대 부분의 면적을 반환하는 패턴

scratch.py
#findContours(入力画像、輪郭抽出モード、輪郭の近似手法)
#輪郭抽出モード (RETR_EXTERNAL, RETR_LIST, RETR_CCOMP, RETR_TREE)
#輪郭の近似手法 (CHAIN_APPROX_NONE, CHAIN_APPROX_SIMPLE)
contours = cv2.findContours(img_dst5, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[0]

#算出された全部の面積の数字をリストに放り込んで最大値(max)、または合計(sum)を返す
area = []
for i in contours:
    area.append(cv2.contourArea(i))
#sum(area)
max(area)

결과
9625.5

⑩ 면적 산출 패턴 2에서 검출한 윤곽을 오리지널의 판독 화상에 합성



면적의 산출 대상 영역이 올바른지 확인하고 싶었다.

scratch.py
analyzed_img = cv2.drawContours(img_src, contours, -1, (0,255,0), 3)



마지막으로



스크래치된 에리어에 세포가 섬을 형성했을 때(인테리어 안에 둘러싸이게 되었을 때), 이번 면적 산출법으로는 대처할 수 없기 때문에, 무엇인가 대응해야 하는가라고 생각합니다. 이제 생각하는 것에 지쳤기 때문에 이 근처에서 끝납니다.
다음에 폴더에 들어간 모든 이미지를 처리하는 일괄 처리 코드를 작성합니다.

좋은 웹페이지 즐겨찾기