0

나는 나뭇잎의 질병을 분류하는 프로젝트를 진행 중이다. 나는 k를 적용하려고하는데, 병이있는 영역이 함께 클러스터링 될 수 있도록 클러스터링을 의미하고 그런 다음 그 클러스터링 된 영역에서 피쳐를 추출 할 수 있습니다. 그러나 배경 때문에 질병이있는 지역이 배경과 밀집되어 있으므로 올바르게 클러스터링 할 수 없습니다.k-means 클러스터링을 효율적으로 적용하기 위해 이미지에서 배경을 제거하는 방법

내 목표는 질병이있는 영역을 클러스터링 한 다음 질병이있는 영역에서 특징을 추출하여 분류자를 훈련시키는 것입니다.

접근 1- 은 내가자를 수 있습니다, 이후 사각형을 그립니다하고 잎 주위에 윤곽을 그린 후 OpenCV의에서 최소 면적 RECT 기능을 사용하려고하지만 윤곽 배경을 제거 할만큼 잘되지 않습니다 . K에 직접 이미지 클러스터링 수단을 적용 -

lower_green = np.array((60-s,100,50)) 
upper_green = np.array((60+s,255,255)) 
name = "Apple_healthy/image_85.jpg" 
bgr = cv2.imread(name) 
hsv = cv2.cvtColor(bgr, cv2.COLOR_BGR2HSV) 
mask = cv2.inRange(hsv, lower_green, upper_green) 
mask = cv2.dilate(mask, None, iterations=50) 
_, contours, hier = cv2.findContours(mask.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 
mask = cv2.bitwise_not(mask) 
cnt = contours[-1] 
cv2.drawContours(bgr,[cnt],0,(0,0,255), 2) 
cv2.imshow('image', bgr) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

rect = cv2.minAreaRect(cnt) 
box = cv2.boxPoints(rect) 
box = np.int0(box) 
cv2.drawContours(bgr,[box],0,(0,0,255),2) 
cv2.imshow('sad',bgr) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

Output of approach-1

접근법 2 : 이하

코드이다. 그러나이 접근법에서는 질병이있는 영역이 배경과 밀집되어 있으므로 병이있는 영역을 함께 클러스터링 할 수 없습니다.

img = cv2.imread('Apple_black_rot/image_85.jpg') 

Z = img.reshape((-1,3)) 

# convert to np.float32 
Z = np.float32(Z) 

# define criteria, number of clusters(K) and apply kmeans() 
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) 
K = 16 
ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS) 

# Now convert back into uint8, and make original image 
center = np.uint8(center) 
res = center[label.flatten()] 
res2 = res.reshape((img.shape)) 

cv2.imshow('res2',res2) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

Output of approach-2

원본 이미지 병에 걸린 지역은 별개의 색상이

Original Image

+0

enter image description here

, 난 당신이 병에 걸린 영역과 배경을 부르는 모른다. 나는 보라색 기질, 검은 그림자, 녹색 잎과 갈색의 다양한 그늘에 얼룩이 보인다. 뭐라구? 명시 해주십시오. –

+0

배경에 보라색 기판과 검은 그림자가 포함되어 있습니다. 병이있는 부위에는 잎에 갈색의 다양한 얼룩이 포함됩니다. – rishi

답변

2

: 아래는 코드입니다. HSV 시스템에서 색조 구성 요소를 추출하고 회색 음영 이미지를 얻을 수 있습니다. 그레이 스케일 이미지는 섀도우 가장자리 (그림 참조)를 제외하고 세그먼테이션이 문제가되지 않아야합니다. 그러나 그림자도 쉽게 감지 할 수 있으며이 영역을 무력화 할 수 있습니다. 그것은 당신에게 분명 보일 수 있지만

enter image description here

+0

귀하의 ans 주셔서 감사합니다. 색조 구성 요소를 추출하여 첫 ​​번째 이미지를 얻었지만 이후에는이를 수행 할 수 없습니다. – rishi

+0

@rishi : 이진화의 쉬운 경우입니다. 동일한 이미지의 경우 –

+0

이미지에서 색조를 추출하고 opencv를 사용하여 색조에 Otsu의 이진화를 적용했지만 원하는 결과를 얻을 수 없었습니다. 즉 두 번째 이미지와 비슷합니다. – rishi

관련 문제