Opencv PlantVillage数据集中番茄叶片图像的分割问题
我正在尝试对番茄作物的叶子图像进行分割。我想转换像下图这样的图像 以黑色背景显示以下图像 我已从中引用此代码 但它在这个问题上做得不好,它做了类似这样的事情Opencv PlantVillage数据集中番茄叶片图像的分割问题,opencv,image-processing,image-segmentation,Opencv,Image Processing,Image Segmentation,我正在尝试对番茄作物的叶子图像进行分割。我想转换像下图这样的图像 以黑色背景显示以下图像 我已从中引用此代码 但它在这个问题上做得不好,它做了类似这样的事情 有人能给我一个建议吗?你的照片的问题是叶子的颜色不同。如果将图像转换为灰度,您将看到二值化算法的问题: 你注意到叶子的下半部分和上半部分的亮度有很大不同吗?这将为您提供图像中三个几乎均匀明亮的区域:实际背景、上半叶和下半叶。这不利于二值化 但是,您的问题可以通过将彩色图像分离到各自的通道中来解决。分离后,您会注意到,在蓝色通道中,叶子
有人能给我一个建议吗?你的照片的问题是叶子的颜色不同。如果将图像转换为灰度,您将看到二值化算法的问题: 你注意到叶子的下半部分和上半部分的亮度有很大不同吗?这将为您提供图像中三个几乎均匀明亮的区域:实际背景、上半叶和下半叶。这不利于二值化 但是,您的问题可以通过将彩色图像分离到各自的通道中来解决。分离后,您会注意到,在蓝色通道中,叶子看起来非常均匀明亮: 如果我们考虑一下我们正在谈论的颜色,这是有道理的:绿色和黄色中都含有非常少量的蓝色,如果有的话。 这使我们很容易对其进行二值化。为了获得更清晰的图像,我首先应用了平滑 然后使用ImageJ的iso_数据阈值(但是,您可以使用任何现有的自动阈值方法)创建二进制掩码: 由于算法已将叶子设置为背景(黑色),因此我们必须将其反转: 通过应用二进制“填充孔”算法,可以进一步改进此遮罩: 此遮罩可用于裁剪原始图像以提取叶子: 通过稍微腐蚀掩模,可以进一步提高结果图像的质量 为了完整性:为了得到结果,不必对图像进行平滑处理。以下是非平滑图像的遮罩: 要消除噪波,首先应用二进制填充孔,然后应用二进制闭合,然后应用二进制腐蚀。这将为您提供: 作为面具 这将导致
图像可以使用-colorspace进行分离。背景的饱和度很小,因此对饱和度进行阈值化可以去除灰度 结果: 代码:
请告诉我们你到目前为止做了什么…@Berriel我已经编辑了我的问题。你是否尝试微调代码的参数?@Berriel我对图像处理非常陌生。我不知道从哪里开始。你能帮帮我吗?
import numpy as np
import cv2
# load image
image = cv2.imread('leaf.jpg')
# create hsv
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# set lower and upper color limits
low_val = (0,60,0)
high_val = (179,255,255)
# Threshold the HSV image
mask = cv2.inRange(hsv, low_val,high_val)
# remove noise
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel=np.ones((8,8),dtype=np.uint8))
# apply mask to original image
result = cv2.bitwise_and(image, image,mask=mask)
#show image
cv2.imshow("Result", result)
cv2.imshow("Mask", mask)
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()