【问题标题】:Segmentation problem for tomato leaf images in PlantVillage DatasetPlantVillage 数据集中番茄叶图像的分割问题
【发布时间】:2019-02-17 02:47:52
【问题描述】:

我正在尝试对番茄作物的叶子图像进行分割。我想转换如下图像的图像

到下面的黑色背景图片

我从Github引用了这段代码

但它在这个问题上做得不好,它做了类似这样的事情

谁能给我一个建议?

【问题讨论】:

  • 请告诉我们你到目前为止做了什么......
  • @Berriel 我已经编辑了我的问题。
  • 你有没有尝试微调代码的参数?
  • @Berriel 我对图像处理很陌生。我不明白我应该从哪里开始。你能帮帮我吗?

标签: opencv image-processing image-segmentation


【解决方案1】:

图像可使用HSV-colorspace 进行分离。背景的饱和度很小,因此对饱和度进行阈值化可以去除灰色。

结果:

代码:

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

【讨论】:

    【解决方案2】:

    您的图像的问题是叶子的颜色不同。如果将图像转换为灰度,您将看到二值化算法的问题:

    您是否注意到叶子下半部分和上半部分的亮度差异很大?这为您提供了图像中三个大部分均匀明亮的区域:实际背景、上半叶和下半叶。这不利于二值化。

    但是,您的问题可以通过将彩色图像分成各自的通道来解决。分离后,您会注意到蓝色通道中的叶子看起来非常均匀明亮:

    如果我们考虑我们正在谈论的颜色,这是有道理的:绿色和黄色都含有非常少量的蓝色,如果有的话。 这使我们很容易对其进行二值化。为了更清晰的图像,我首先应用了平滑

    然后使用 ImageJ 的 iso_data 阈值(您可以使用任何现有的自动阈值方法)来创建二进制掩码:

    由于算法已将叶子设置为背景(黑色),我们必须将其反转:

    可以通过应用二进制“填充孔”算法进一步改进此掩码:

    此蒙版可用于裁剪原始图像以提取叶子:

    通过稍微腐蚀遮罩,可以进一步提高结果图像的质量。

    为了完整起见:您不必平滑图像即可获得结果。这是未平滑图像的蒙版:

    要去除噪声,首先应用二进制填充孔,然后二进制闭合,然后是二进制侵蚀。这会给你:

    作为面具。

    这会导致

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      相关资源
      最近更新 更多