我已经从事了一段时间的项目是无监督的叶分割。叶子被捕获在白色或彩色的纸上,其中一些带有阴影。
我希望能够对叶子进行阈值处理并去除阴影(同时保留叶子的细节);但是由于疾病改变了叶子的颜色,我无法使用固定的阈值。
然后,我开始研究并找出Horprasert等人的建议。等 (1999年)在“一种用于实时鲁棒背景扣除和阴影检测的统计方法”中,该方法使用色度失真度量将图像中的区域与当前已知背景的颜色进行比较。该措施考虑到以下事实:对于不饱和的颜色,色相不是相关的措施。
基于此,我可以实现以下结果:
但是,在白皮书上捕获的叶子需要更改Mask V cv2.bitwise_not(),从而得到以下结果:
我在想,我忘记了要准备一个完整的面膜的步骤,该面膜适用于我的全部或大部分叶子。样品可以在这里找到。
我的代码:
import numpy as np
import cv2
import matplotlib.pyplot as plot
import scipy.ndimage as ndimage
def brightness_distortion(I, mu, sigma):
return np.sum(I*mu/sigma**2, axis=-1) / np.sum((mu/sigma)**2, axis=-1)
def chromacity_distortion(I, mu, sigma):
alpha = brightness_distortion(I, mu, sigma)[...,None]
return np.sqrt(np.sum(((I - alpha * mu)/sigma)**2, axis=-1))
def bwareafilt ( image ):
image = image.astype(np.uint8)
nb_components, output, stats, centroids = cv2.connectedComponentsWithStats(image, connectivity=4)
sizes = stats[:, -1]
max_label = 1
max_size = sizes[1]
for i …
Run Code Online (Sandbox Code Playgroud)