如何从图像中去除背景以有效地应用kmeans聚类

2024-09-30 08:31:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在进行一个将疾病分类的项目。我尝试应用k均值聚类,以便将病变区域聚集在一起,然后从聚集区域中提取特征。但是,由于背景的原因,我无法正确地聚类,因为病变区域是与背景聚集在一起的。在

本文的目标是对病区进行聚类,然后从病区中提取特征来训练分类器。在

方法1- 我试着在叶子周围画一个轮廓,然后用OpenCV中的minarearect函数画一个矩形,然后,我可以裁剪,但是轮廓不够精细,无法去除背景。在

代码如下:

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- 直接应用图像聚类方法。但在这种方法中,我无法将病变区域聚集在一起,因为病变区域与背景聚集在一起。代码如下:

^{pr2}$

Output of approach-2

原始图像

Original Image


Tags: 方法代码box区域npmask聚类green

热门问题