自动方法去除白色背景上的colord对象阴影?

 疯狂一夏531 发布于 2023-02-11 12:12

我正在使用OpenCV(Java)处理一些叶子图像.叶子被捕获在白纸上,有些像这样的阴影:

在此输入图像描述

当然,它是某种极端情况(有更温和的阴影).

现在,我想要对叶子进行阈值处理并删除阴影(同时保留叶子的细节).


我目前的流程如下:

1)转换为HSV并提取饱和度通道:

Imgproc.cvtColor(colorMat, colorMat, Imgproc.COLOR_RGB2HSV);
ArrayList channels = 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:在某些情况下,阴影比叶子更暗的假设并不总是成立.因此,处理强度无济于事.我正在寻求一种色彩通道方法.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有