我正在使用python和simpleCV来提取图像的绿色像素数。最后,我正在做一些计算以获得植物的叶面积。
我的问题是图片的质量有时不是很高,导致没有检测到像素。
在simpleCV中,相关设置为:
green = plant.hueDistance(color=Color.GREEN, minsaturation=55, minvalue=55).binarize(70).invert()
更改minsaturation和minvalue没有多大帮助,因为我得到了太多的错误像素识别。所以我想事先做一些图像编辑。
有人能想出一种让像素更容易检测到的方法吗?
原始图片
simpleCV之后的图片
答案 0 :(得分:0)
对于遇到同样问题的其他人,使用imagemagick(转换)和“-level”获得了一些不错的结果
我的批处理文件
for %%f in (*.JPG) do ( convert.exe %%f -level 0,25%% "%%~nf.png" )
答案 1 :(得分:0)
在Imagemagick中,您可以在H,C和L颜色空间中选择性阈值范围。然后使用连接的组件删除小区域。 Unix语法。
convert green.jpg -colorspace HCL -separate \
\( -clone 0 -fuzz 7% -fill white -opaque "gray(66)" \
-fill black +opaque white \) \
\( -clone 1 -fuzz 10% -fill white -opaque "gray(46)" \
-fill black +opaque white \) \
\( -clone 2 -fuzz 7% -fill white -opaque "gray(87)" \
-fill black +opaque white \) \
-delete 0-2 -compose multiply -composite tmp1.png
convert tmp1.png \
-define connected-components:verbose=true \
-define connected-components:area-threshold=5160 \
-define connected-components:mean-color=true \
-connected-components 4 \
result.png
这两个命令可以组合成一个长命令。
convert green.jpg -colorspace HCL -separate \
\( -clone 0 -fuzz 7% -fill white -opaque "gray(66)" \
-fill black +opaque white \) \
\( -clone 1 -fuzz 10% -fill white -opaque "gray(46)" \
-fill black +opaque white \) \
\( -clone 2 -fuzz 7% -fill white -opaque "gray(87)" \
-fill black +opaque white \) \
-delete 0-2 -compose multiply -composite \
-define connected-components:verbose=true \
-define connected-components:area-threshold=5160 \
-define connected-components:mean-color=true \
-connected-components 4 \
result.png