Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv PlantVillage数据集中番茄叶片图像的分割问题_Opencv_Image Processing_Image Segmentation - Fatal编程技术网

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()