传统图像处理之颜色特征

news/2024/11/6 21:25:15/

 博主简介

博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c++,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的,如果有错误之处,大家可以指正。

专栏简介:   本专栏主要研究计算机视觉,涉及算法,案例实践,网络模型等知识。包括一些常用的数据处理算法,也会介绍很多的Python第三方库。如果需要,点击这里  订阅专栏 。

给大家分享一个我很喜欢的一句话:“每天多努力一点,不为别的,只为日后,能够多一些选择,选择舒心的日子,选择自己喜欢的人!”


目录

颜色特征

RGB颜色特征

HIS颜色空间

HSV颜色空间

 颜色直方图

OpenCV图像色调、对比度变化


在深度学习广泛应用之前,也就是我们所说的传统图像处理,人们是如何处理图像的呢?首先找出图片中的关键特征,然后对这些特征进行识别,检测,分割等。在对计算机进行处理时,也需要先寻找特征。在让计算机理解图像之前,我们先来熟悉熟悉图像特征。

颜色特征

对于颜色特征,我们在描述它之前,我们首先要选择合适的颜色空间来描述颜色特征,颜色空间包括灰度图,RGB、HIS、HSL、HSV、HSB、YCrCB、CIE、XYZ、CIE、Lab等;其次,我们要采用一定的零花方法将颜色特征表达为向量的形式;最后,还要定义相似度。

RGB颜色特征

色彩三原色应该都听过,及品红(不是蓝色),这是我们在平时所使用的,但是对于计算机来说,他们呢的显示屏使用的则是:红、绿、蓝。他们对应的波长为700nm,546

.1nm,435.8nm。这三种颜色可以根据不同的比例组成不同的颜色,而他们混合后就是白色。

RGB模式是如何定义的喃?根据不同的亮度值,将每种颜色分为0~255,所有颜色可以用三种颜色混合得到。那么一共有(256x256x256=16777216种。例如纯黑色(0,0,0)和纯白色(255,255,255)。

import cv2
img=cv2.imread('F:\Image\\test1.jpg',cv2.IMREAD_COLOR)
print(img)

[[[180 204 220] [176 200 219] [171 192 216] ... [144 169 217] [142 168 219] [145 173 223]] [[171 195 211] [167 190 209] [161 183 207] ... [133 157 206] [131 157 207] [133 162 212]] [[165 189 205] [161 184 203] [155 177 201] ... [124 149 197] [122 149 199] [125 154 204]] ...

...

... [ 35 60 113] [ 51 77 130] [ 65 91 144]]]

看上面图片的矩阵输出,你们会发现,它的值都是在0~255之间,这就是因为他们都是色彩三原色构成,组成一个三维矩阵。所以我们如果要对图片操作,就只需要对三维矩阵操作就可以了。博主有一篇文章就是介绍这个的,比如打马赛克,当然,后面的学习会更精彩。言归正传,除了RGB色彩,我们还需要认识其他的颜色空间。

HIS颜色空间

HIS模式是从人的视觉系统出发,用色调,饱和度和亮度来描述色彩。因为该颜色空间非常的逼近人的视觉系统,因此,用HIS来处理图像非常的逼真,当然,除此之外,还有一个原因是现在的很多图像处理算法都是关于HIS的,所以,使用HIS更加方便我们操作。

HIS颜色空间,H指色调或色相,表示光线的波长,取值范围为0~360度;S指饱和度,表示色彩的纯度,取值范围为0~100%(饱和);I指亮度,表示敏感程度,取值范围为0~100%。 如果想实现颜色空间转化,那么我们只需要用到cv2.cvtColor(img,cv2.COLOR_BGR2RGB).第二个参数为转换方式:

函数转换解释文档

点击这个解释文档,就可以得到转换方式。太多了,博主就不一一介绍了,基本上就是COLOR_BGR2**,后面的就是要转换的格式,如RGB,HIS,YCrCb等,当然,opencv2版本则不一样,官网会有介绍。

import cv2
img=cv2.imread('F:\Image\\test1.jpg',cv2.IMREAD_COLOR)
cv2.imshow('1',img)
#转换为rgb颜色空间
rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
cv2.imshow('2',rgb)
#转换为hls颜色空间
his=cv2.cvtColor(img,cv2.COLOR_BGR2HLS)
cv2.imshow('3',his)
#转换为灰度图像
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('4',gray)
cv2.waitKey(0)

 上面的图片展示了不同的颜色空间下的图片,我们可以发现,不同的颜色空间对应的图片也是不同的,所以如果要使用图片,就要根据当时的情况来进行选择。

HSV颜色空间

HSV颜色空间的模型和HIS相似,依据色泽,明暗和色调来定义颜色,其中H代表色度,S代表饱和度,V代表亮度,要注意的是这里的色度、饱和度的定义均和HIS颜色空间不同。该空间比RGB模式更接近于人对色彩的感知,在计算机领域应用最为广泛。

圆锥的顶面对应于亮度V=1(最亮)。色度H由目标位置绕V轴的旋转角给定:0°对应红色,120°对应绿色,240°对应蓝色(正好为RGB三原色)。在HSV空间中,每种颜色和他的补色相差180°。饱和度S取值范围为0~1,对应圆锥顶面的半径为1.要注意的是饱和度为1的颜色,其纯度一般小于1.在圆锥的顶点处,V=0,H和S无定义表示最暗的黑色;在原罪的顶面中心处,S=0,V=1,H无定义,代表最亮的白色。从该点到原点,代表亮度渐暗的灰色,对于这些点,S0,H均无定义。在圆锥顶面的圆周上的颜色,V=1,S=1,即纯色。如图,斜边表示亮度V,每个圆面的半径方向表示饱和度S。

我们来看一下HSV图片的矩阵形式:

BGR:

[[[180 204 220] [176 200 219] [171 192 216] ... [144 169 217] [142 168 219] [145 173 223]] [[171 195 211] [167 190 209] [161 183 207] ... [133 157 206] [131 157 207] [133 162 212]] [[165 189 205] [161 184 203] [155 177 201] ... [124 149 197] [122 149 199] [125 154 204]] ...

...

... [ 35 60 113] [ 51 77 130] [ 65 91 144]]]

HSV

[[[ 18 46 220] [ 17 50 219] [ 14 53 216] ... [ 10 86 217] [ 10 90 219] [ 11 89 223]] [[ 18 48 211] [ 16 51 209] [ 14 57 207] ... [ 10 90 206] [ 10 94 207] [ 11 95 212]] [[ 18 50 205] [ 16 53 203] [ 14 58 201] ... [ 10 94 197] [ 11 99 199] [ 11 99 204]] ...

...

... [ 10 176 113] [ 10 155 130] [ 10 140 144]]]

 颜色直方图

颜色直方图是在图像检索中被广泛采用的颜色特征。他所描述的是不同色彩在整幅图像中所占的比例,而与每种颜色所处位置无关,既无法描述图像中的具体物体。因此,颜色直方图对物体识别基本没有帮助,但特别适合处理难以进行自动分割的图像。

由于颜色空间太大,计算颜色直方图需要将颜色空间划分成若干个小区间,每个小区间成为直方图的一个bin,这个过程称为颜色量化。然后,通过计算落在每个bin内的像素数量可以得到颜色直方图。颜色量化有多种方式,有向量量化,聚类方法和神经网络方法。最常用的就是向量量化,即将颜色空间的各个维度均匀的进行划分。

颜色直方图特征匹配方法:距离法,中心距法,直方图相交法、参考颜色表法、累加颜色直方图法等。

在OPenCV中,我们使用函数cv2.calcHist()方法计算颜色直方图,此函数的可选参数:图像img、使用的通道channels、使用的掩模mask、大小HistSize和直方图柱的范围ranges。

import cv2
import matplotlib.pyplot as plt
img=cv2.imread('F:\Image\\test1.jpg',cv2.IMREAD_COLOR)
#展示原图片
cv2.imshow('',img)
cv2.waitKey(0)
#分为三个通道
color=('b','g','r')
for i,col in enumerate(color):histr=cv2.calcHist([img],[i],None,[256],[0,256])#画图plt.plot(histr,color=col)
plt.show()

上面第一个图象是原图,第二个就是实现对该图像进行颜色直方图的分析的线性图。然后覆盖了源代码。

OpenCV图像色调、对比度变化

毫无疑问,图像的色调、颜色、对比度、明暗度均可以调整,由于物体的类别与颜色关系不大,所以调整图片的色调和颜色也能够作为数据增强的手段之一。比如后面我们要介绍到的物体识别,图像检测等,都会把图像转变为灰色。

我么先来认识一下图像色调变化:


import cv2
import numpy as np
img=cv2.imread('F:\Image\\test2.jpg',cv2.IMREAD_COLOR)
cv2.imshow('原图片',img)
hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#改变色调
hsv[:,:,0]=(hsv[:,:,0]+10)%180
#改变饱和度
hsv[:,:,1]=(hsv[:,:,1]+10)%255
#改变明暗度hsv[:,:,2]=(hsv[:,:,2]+10)%255
#转化为RGB格式
img1=cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)
#显示图片
cv2.imshow('图片调整',img1)
cv2.waitKey(0)

(1)原图                                                                       (2)HSV图片

上面的代码只是简单的对颜色转换进行了实现,大家可以根据博主前面介绍的方法取试验一下,能够将图片转化成各式各样的。好了,本节内容就到此结束了!拜了个拜!

点赞加关注不迷路


http://www.ppmy.cn/news/31744.html

相关文章

【面试题】Nginx面试题汇总(无解答)

什么是Nginx?谈谈个人都理解,项目中是否用到,为什么要用,有什么优点?为什么要用Nginx?为什么Nginx性能这么高?Nginx怎么处理请求的?什么是正向代理和反向代理?使用“反向…

【数据结构】树与二叉树

文章目录树二叉树二叉树的性质完全二叉树二叉树的存储遍历二叉树和线索二叉树6.4 树和森林哈夫曼树应用树 树的定义:树是以分支关系定义的层次结构。 D; 树(Tree)是n(n≥0)个结点的有限集。 R 数据关系 有且仅有一个特定的称为根(Root) 的结点 当n>1时&…

RPC通信相关

RPCRPC, 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议,该协议允许运行于一台计算机的程序程调用另一台计算机的上的程序。通俗讲,RPC通过把网络通讯抽象为远程的过程调用,调用远程的过程就…

Homekit智能家居系列一智能触摸面板开关

触摸开关,即通过触摸方式控制的墙壁开关,其感官场景如同我们的触屏手机,只需手指轻轻一点即可达到控制电器的目的,随着人们生活品质的提高,触摸开关将逐渐将换代传统机械按键开关。 触摸开关控制原理 触摸开关我们把…

面试必会-MySQL篇

1. Mysql查询语句的书写顺序Select [distinct ] <字段名称>from 表1 [ <join类型> join 表2 on <join条件> ]where <where条件>group by <字段>having <having条件>order by <排序字段>limit <起始偏移量,行数>2. Mysql查询语…

[手撕数据结构]栈的深入学习-java实现

CSDN的各位uu们你们好,今天千泽带来了栈的深入学习,我们会简单的用代码实现一下栈, 接下来让我们一起进入栈的神奇小世界吧!0.速览文章一、栈的定义1. 栈的概念2. 栈的图解二、栈的模拟实现三.栈的经典使用场景-逆波兰表达式总结一、栈的定义 1. 栈的概念 栈&#xff1a;一种…

【企业管理】你真的理解向下管理吗?

导读&#xff1a;拜读陈老师一篇文章《不会向下负责&#xff0c;你凭什么做管理者&#xff1f;》&#xff0c;引发不少共鸣&#xff0c;“很多管理者有一种错误的观念&#xff0c;认为管理是向下管理&#xff0c;向上负责。其实应该反过来&#xff0c;是向上管理&#xff0c;向…

利用Dockerfile开发定制镜像实战.

Dockerfile的原理 dockerfile是一种文本格式的文件&#xff0c;用于描述如何构建Docker镜像。在Dockerfile中&#xff0c;我们可以定义基础镜像、安装依赖、添加文件等操作&#xff0c;最终生成一个可以直接运行的容器镜像。 Dockerfile的原理可以分为以下几个步骤&#xff1a…