我正在使用OpenCV(Java)处理一些叶子图像.叶子被捕获在白纸上,有些像这样的阴影:
当然,它是某种极端情况(有更温和的阴影).
现在,我想要对叶子进行阈值处理并删除阴影(同时保留叶子的细节).
我目前的流程如下:
1)转换为HSV并提取饱和度通道:
Imgproc.cvtColor(colorMat, colorMat, Imgproc.COLOR_RGB2HSV); ArrayListchannels = new ArrayList (); Core.split(colorMat, channels); satImg = channels.get(1);
2)去噪(中位数)并应用adaptiveThreshold:
Imgproc.medianBlur(satImg , satImg , 11); Imgproc.adaptiveThreshold(satImg , satImg , 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 401, -10);
结果如下:
它看起来不错,但阴影导致沿左边界出现一些异常.此外,我有这种感觉,我没有使用白色背景对我有利.
现在,我有两个问题:
1)如何改善结果并摆脱阴影?
2)如果不在饱和通道上工作,我能获得好的结果吗?.我问的原因是,在我的大多数图像上,使用L通道(来自HLS)可以获得更好的结果(当然除了阴影).
更新:使用Hue通道使threshdolding更好,但使阴影情况更糟:
Update2:在某些情况下,阴影比叶子更暗的假设并不总是成立.因此,处理强度无济于事.我正在寻求一种色彩通道方法.