基于OpenCV实战的图像处理:色度分割

重磅干货,第一时间送达

通过HSV色阶使用彩色图像可以分割来分割图像中的对象,但这并不是分割图像的唯一方法。为什么大多数人偏爱色度而不是RGB / HSV分割?

  • 可以获得RGB / HSV通道之间的比率。

  • 可以使用由辅助颜色和其他颜色的混合物组成的目标色块。

我们将色度分割定义为利用RG通道的色度空间从图像中提取目标的过程。后者构成了一个二维颜色表示,它忽略了与强度值相关的图像信息。我们通过观察不同颜色通道的比例来实现这一点,并使用标准化的RGB空间来映射它。因此,为了计算图像的RG色度,我们使用以下方程式:

我们主要只看r和g方程,因为从那里我们可以直观地计算b通道,让我们使用我们的老朋友Python将色度分割付诸实践。在继续执行之前,请安装以下库:

from skimage.io import imread, imshowimport matplotlib.pyplot as pltimport numpy as np

本文实践操作将使用此图像:

图像处理步骤:

步骤1:计算图像的RG色度

  • 这是通过使用引言中定义的方程式完成的。

步骤2:计算颜色值的2D直方图(原始图像)

  • 这是通过使R和色度值均变平并将其输入hist2d函数中来实现的。

  • 通过这一点,可以注意到什么颜色或一组颜色构成了我们的图像。

步骤3:选择参考图片补丁

  • 从感兴趣的对象生成补丁。在这种情况下,我们将草莓细分。因此,将要选择的补丁将是草莓的补丁。

步骤4:计算补丁的RG色度

  • 重复步骤1,但在步骤3中使用图像补丁

步骤5:计算颜色值的2D直方图(色标)

  • 重复步骤2,但在步骤3中使用图像

到目前为止,我们已经获得了相关图像的RG色度值。现在,我们进行下一步-参数分割。

第6步:参数细分

  • 此步骤要求我们拟合高斯分布,该分布将确定属于感兴趣颜色的像素。在执行此操作之前,应从感兴趣的对象(参考补丁)计算平均值和标准偏差。然后将这些反馈给高斯分布函数。

步骤1-6的代码实现如下实现:

#image chromaticity values fruits_R = fruits[:,:,0]*1.0/fruits.sum(axis=2) fruits_G = fruits[:,:,1]*1.0/fruits.sum(axis=2) #patch patch_strw = fruits[60:90,50:90,:] #patch chromaticity values patch_R = patch_strw[:,:,0]*1.0/patch_strw.sum(axis=2) patch_G = patch_strw[:,:,1]*1.0/patch_strw.sum(axis=2) #mean and stdev calculation of patch std_patch_R = np.std(patch_R.flatten()) mean_patch_R = np.mean(patch_R.flatten()) std_patch_G = np.std(patch_G.flatten()) mean_patch_G = np.mean(patch_G.flatten()) #gaussian function def gaussian(p,mean,std): return np.exp(-(p-mean)**2/(2*std**2))*(1/(std*((2*np.pi)**0.5))) x = np.linspace(0,1) y = gaussian(x,mean_patch_R,std_patch_R) #plotting fig, ax = plt.subplots(2, 3, figsize=(20, 7)) ax[0,0].scatter(fruits_R.flatten(),fruits_G.flatten()) ax[0,0].set_title('RG Chromaticity', size=14) ax[0,1].hist2d(fruits_R.flatten(), fruits_G.flatten(), bins=100,cmap='binary'); ax[0,1].set_title('Color Values 2D Histogram', size=14) ax[0,2].imshow(patch_strw) ax[0,2].set_title('Strawberry Patch', size=14) ax[1,0].scatter(patch_R.flatten(),patch_G.flatten()) ax[1,0].set_title('Patch RG Chromaticity', size=14) ax[1,1].hist2d(patch_R.flatten(), patch_G.flatten(), bins=100,cmap='binary') ax[1,1].set_title('Patch Color Values 2D Histogram', size=14) ax[1,2].plot(x,y) ax[1,2].set_title('Gaussian Plot', size=14) fig.suptitle('Strawberry', size = 30)

综上所述,类似于彩色图像分割方法,存在一个任意确定的阈值。尝试并尝试使用这些值,然后选择将返回最理想输出的值。同样,在最终图中,尽管草莓被清楚地分割了,但仍然捕获了无关的信息。这是进行形态学操作以方便进一步清洁图像的地方,因此分割与以往一样准确。

— — 完 — —

下载1:OpenCV-Contrib扩展模块中文版教程
(0)

相关推荐

  • 使用局部加权线性回归解决非线性数据的拟合问题

    对于回归而言,有线性模型和非线性模型两大模型,从名字中的线性和非线性也可以直观的看出其对应的使用场景,但是在实际分析中,线性模型作为最简单直观的模型,是我们分析的首选模型,无论数据是否符合线性,肯定都 ...

  • Navicat Premium 15 永久激活版安装教程

    前言 Navicat 可以说是众多程序猿小伙伴的忠爱了,因为界面简洁且操作简单,让我们爱不释手:最近Navicat Premium 15发布了, 让我们来看看如何安装永久激活版哦(简称白嫖版) Nav ...

  • Adversarial patch camouflage against aerial detection

    Adversarial Patch Camouflage against Aerial Detection [Adversarial Patch Camouflage against Aerial D ...

  • OpenCV:计算图片有多色

    计算图片色彩丰富度 首先我们要有一个色彩丰富度的标准.Hasler and Süsstrunk的研究将颜色丰富度划分为7级. 无(Not colorful) 稍微(Slightly colorful) ...

  • 利用遗传算法优化GANs

    GANs是在训练阶段最需要计算的密集型模型之一,因为它相当于同时训练两个神经网络.对于我的普通电脑来说,把gan训练到收敛是非常困难的. 遗传算法是根据大自然中生物体进化规律而设计提出的,是根据大自然 ...

  • 基于OpenCV实战:车牌检测

    重磅干货,第一时间送达 拥有思维导图或流程将引导我们朝着探索和寻找实现目标的正确道路的方向发展.如果要给我一张图片,我们如何找到车牌并提取文字? 一般思维步骤: 识别输入数据是图像. 扫描图像以查看由 ...

  • 基于OpenCV实战:绘制图像轮廓(附代码)

    重磅干货,第一时间送达 山区和地形图中海拔高的区域划出的线称为地形轮廓,它们提供了地形的高程图.这些线条可以手动绘制,也可以由计算机生成.在本文中,我们将看到如何使用OpenCV在简单图像上绘制轮廓线 ...

  • 基于OpenCV实战:动态物体检测

    重磅干货,第一时间送达 最近,闭路电视安全系统运行着多种算法来确保安全,例如面部识别,物体检测,盗窃检测,火灾警报等.我们在运动检测的基础上实现了许多算法,因为在空闲帧上运行所有这些进程没有任何意义. ...

  • 基于OpenCV实战:对象跟踪

    重磅干货,第一时间送达 介绍 跟踪对象的基本思想是找到对象的轮廓,基于HSV颜色值. 轮廓:突出显示对象的图像片段.例如,如果将二进制阈值应用于具有(180,255)的图像,则大于180的像素将以白色 ...

  • 基于OpenCV的实用图像处理操作

    重磅干货,第一时间送达 图像处理适用于图像和视频.良好的图像处理结果会为后续的进一步处理带来很大的帮助,例如提取到图像中的直线有助于对图像中物体的结构进行分析,良好的特征提取会优化深度学习的结果等.今 ...

  • 基于opencv实现模块化图像处理管道

    重磅干货,第一时间送达 在这篇文章中,我们将学习如何为图像处理实现一个简单的模块化管道,我们将使用 OpenCV 进行图像处理和操作,并使用 Python 生成器进行管道步骤. 图像处理管道是一组按预 ...

  • 基于OpenCV的实战:轮廓检测(附代码解析)

    重磅干货,第一时间送达 利用轮廓检测物体可以看到物体的各种颜色,在这种情况下放置在静态和动态物体上.如果是统计图像,则需要将图像加载到程序中,然后使用OpenCV库,以便跟踪对象. 每当在框架中检测到 ...

  • 实战:基于OpenCV 的车牌识别

    重磅干货,第一时间送达 车牌识别是一种图像处理技术,用于识别不同车辆.这项技术被广泛用于各种安全检测中.现在让我一起基于OpenCV编写Python代码来完成这一任务. 车牌识别的相关步骤 1.车牌检 ...

  • 实战:基于OpenCV进行长时间曝光(内含彩蛋)

    重磅干货,第一时间送达 在本文中,我们将学习长时间曝光摄影技术,以及如何使用Python和OpenCV(开源计算机视觉库)对其进行仿真. 一.什么是"长时间曝光"? 直接来自维基百 ...