专栏首页深度学习和计算机视觉基于OpenCV实战的图像处理:色度分割

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

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

  • 可以获得RGB / HSV通道之间的比率。
  • 可以使用由辅助颜色和其他颜色的混合物组成的目标色块。

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

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

from skimage.io import imread, imshow
import matplotlib.pyplot as plt
import 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)

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

— — 完 — —

本文分享自微信公众号 - 小白学视觉(NoobCV),作者:小白

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于OpenCV的图像分割处理!

    图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰...

    Datawhale
  • 基于 OpenCV 的图像分割

    https://github.com/kiteco/kite-python-blog-post-code/tree/master/image-segmentat...

    小白学视觉
  • 基于OpenCV的实用图像处理操作

    图像处理适用于图像和视频。良好的图像处理结果会为后续的进一步处理带来很大的帮助,例如提取到图像中的直线有助于对图像中物体的结构进行分析,良好的特征提取会优化深度...

    小白学视觉
  • 【综合练习】C++ OpenCV实战---获取数量

    前阵子做了一个实战分享《【干货】C++ OpenCV案例实战---卡片截取(附代码)》,今天我们再把以前学习到的东西综合练习一下,做一个获取个数的小案例。

    Vaccae
  • OpenCV图像处理专栏十五 |《一种基于亮度均衡的图像阈值分割技术》

    对于光照不均匀的图像,用通常的图像分割方法不能取得满意的效果。为了解决这个问题,论文《一种基于亮度均衡的图像阈值分割技术》提出了一种实用而简便的图像分割方法。该...

    BBuf
  • 基于GAN的自动驾驶汽车语义分割

    语义分割是计算机视觉中的关键概念之一,语义分割允许计算机通过按类型对图像中的对象进行颜色编码。GAN建立在基于真实内容的基础上复制和生成原始内容的概念上,这使它...

    小白学视觉
  • 专栏 | OpenCV图像处理专栏十五 |《一种基于亮度均衡的图像阈值分割技术》

    对于光照不均匀的图像,用通常的图像分割方法不能取得满意的效果。为了解决这个问题,论文《一种基于亮度均衡的图像阈值分割技术》提出了一种实用而简便的图像分割方法。该...

    AI研习社
  • 【对比评测】OpenCV利用颜色分割获取数量

    还记得这个图吗?前阵子有篇文章《【综合练习】C++OpenCV实战---获取数量》里面中我们利用学到了一些OpenCV的基本知识进行了数量的提取。当时算是完成了...

    Vaccae
  • 历时七个月整理出来的《OpenCV4系统化学习路线图》

    OpenCV4.0发布以来,其依靠良好的接口代码、系统级别的优化、更加通用易学的函数调用,集成OpenVINO与tensorflow、caffe等模型加速推断、...

    AI算法与图像处理
  • 历时七个月整理出来的《OpenCV4系统化学习路线图》

    OpenCV4.0发布以来,其依靠良好的接口代码、系统级别的优化、更加通用易学的函数调用,集成OpenVINO与tensorflow、caffe等模型加速推断、...

    磐创AI
  • 使用OpenCV进行颜色分割

    在滤波、变换、缩放等任务中,图像分割具有重要的意义。图像分割是将不同的对象划分为不同的部分,并将这些区域以明显的颜色或者记号标记出来。图像分割是使用轮廓、边界框...

    AI算法与图像处理
  • 使用OpenCV进行颜色分割

    在滤波、变换、缩放等任务中,图像分割具有重要的意义。图像分割是将不同的对象划分为不同的部分,并将这些区域以明显的颜色或者记号标记出来。图像分割是使用轮廓、边界框...

    小白学视觉
  • 汇总 | OpenCV4中的非典型深度学习模型

    前面给大家分别汇总了OpenCV中支持的图像分类与对象检测模型,视觉视觉任务除了分类与检测还有很多其他任务,这里我们就来OpenCV中支持的非分类与检测的视觉模...

    OpenCV学堂
  • 基于OpenCV修复表格缺失的轮廓--如何识别和修复表格识别中的虚线

    通过扫描或照片对文档进行数字化处理时,错误的设置或不良的条件可能会影响图像质量。在识别的情况下,这可能导致表结构损坏。某些图标的处理结果可能只是有轻微的瑕疵,甚...

    小白学视觉
  • 图像处理基础:颜色空间及其OpenCV实现

    对图像的颜色空间做了一个概念性的介绍,并通过代码的方式可视化了每种颜色空间的每个通道所表示的意义。

    小白学视觉
  • OpenCV图像处理之基于积分图实现NCC快速相似度匹配

    基于Normalized cross correlation(NCC)用来比较两幅图像的相似程度已经是一个常见的图像处理手段。在工业生产环节检测、监控领域对对象...

    OpenCV学堂
  • OpenCV4最全系统化学习路线图与教程!

    OpenCV4.0发布以来,其依靠良好的接口代码、系统级别的优化、更加通用易学的函数调用,集成OpenVINO与tensorflow、caffe等模型加速推断、...

    小小詹同学
  • OpenCV4系统化学习路线图与教程

    OpenCV4.0发布以来,其依靠良好的接口代码、系统级别的优化、更加通用易学的函数调用,集成OpenVINO与tensorflow、caffe等模型加速推断、...

    磐创AI
  • OpenCV4系统化学习路线图与教程

    OpenCV4.0发布以来,其依靠良好的接口代码、系统级别的优化、更加通用易学的函数调用,集成OpenVINO与tensorflow、caffe等模型加速推断、...

    计算机视觉研究院

扫码关注云+社区

领取腾讯云代金券