第六章 彩色图像处理

news2024/12/25 8:59:49

第六章 彩色图像处理

6.1彩色基础

颜色特性:

  1. 亮度:表达了无色的强度概念
  2. 色调:光波混合中与波长有关的属性(即颜色)
  3. 饱和度:即相对纯净度,或一种颜色混合白光的数量。饱和度与所加白光成反比

光的混合:

6.2彩色基础

6.2.1RGB彩色模型

在RGB 彩色模型中表示的图像由3个分量图像组成,每种原色一幅分量图像。当送人RGB 监视器时,这3幅图像在屏幕上混合生成一幅合成的彩色图像。在RGB空间中,用于表示每个像素的比特数称为像素深度。考虑一幅RGB 图像,其中每一幅红、绿、蓝图像都是一幅8比特图像,在这种条件下,可以说每个RGB彩色像素[即(R, G, B)值的三元组]有24比特的深度(3个图像平面乘以每个平面的比特数)。术语全彩色图像通常用来表示一幅24比特的RGB 彩色图像。在24比特RGB图像中,颜色总数是 ( 2 8 ) 3 = 16777216 (2^8)^3=16777216 (28)3=16777216在这里插入图片描述

6.2.2CMY和CMYK彩色模型

[ C M Y ] = [ 1 1 1 ] − [ R G B ] \begin{bmatrix}C\\ M\\ Y\end{bmatrix}=\begin{bmatrix}1\\ 1\\ 1\end{bmatrix}-\begin{bmatrix}R\\ G\\ B\end{bmatrix} CMY = 111 RGB

HSI颜色空间是从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation)和亮度(Intensity)来描述色彩。HSI颜色空间可以用一个圆锥空间模型来描述。用这种描述HSI色彩空间的圆锥模型相当复杂,但确能把色调、亮度和色饱和度的变化情形表现得很清楚。

上图是HSI的双圆锥模型。模型中双圆锥的上顶点对应I=1,即白色;下顶点对应I=0,即黑色。色调(色相)用角度表示,0°表示红色,互补色相差180°。饱和度的取值范围从0到1,0对应于垂直轴的中心线(也就是说这条线上没有色彩,只有灰度),I=0.5时红色的饱和度为1,颜色空间中的点到I轴的距离即是其饱和度。

RGB转HSI
给定一幅RGB彩色格式的图像,每个RGB像素的H分量可用下式得到: H = { θ , B ⩽ G 360 − θ , B > G H=\begin{cases}{\theta},\quad&B\leqslant G\\ 360-\theta,\quad&B>G\end{cases} H={θ,360θ,BGB>G
其中, θ = arccos ⁡ [ 1 2 [ ( R − G ) + ( R − B ) ] [ ( R − G ) 2 + ( R − B ) ( G − B ) ] 1 / 2 ] \theta=\arccos\left[\frac{\frac{1}{2}[(R-G)+(R-B)]}{\left[(R-G)^{2}+(R-B)(G-B)\right]^{1/2}}\right] θ=arccos[[(RG)2+(RB)(GB)]1/221[(RG)+(RB)]]
饱和度分量由下式给出: S = 1 − 3 ( R + G + B ) [ min ⁡ ( R , G , B ) ] S=1-\frac{3}{(R+{G}+B)}\big[\min(R,{G},{B})\big] S=1(R+G+B)3[min(R,G,B)]
最后,强度分量由下式给出: I = 1 3 ( R + G + B ) I=\frac{1}{3}(R+G+B) I=31(R+G+B)

HSI转RGB

  1. RG扇区( 0 ∘ ⩽ H < 12 0 ∘ 0^{\circ}\leqslant H<120^{\circ} 0H<120): B = I ( 1 − S ) R = I [ 1 + S cos ⁡ H cos ⁡ ( 6 0 ∘ − H ) ] G = 3 I − ( R + B ) \begin{gathered}B=I\left(1-S\right) \\R=I\left[1+{\frac{S\cos H}{\cos(60^{\circ}-H)}}\right] \\G=3I-\left(R+B\right) \end{gathered} B=I(1S)R=I[1+cos(60H)ScosH]G=3I(R+B)
  2. GB扇区( 12 0 ∘ ⩽ H < 24 0 ∘ 120^{\circ}\leqslant H<240^{\circ} 120H<240): H = H − 12 0 ∘ R = I ( 1 − S ) G = I [ 1 + S cos ⁡ H cos ⁡ ( 6 0 ∘ − H ) ] B = 3 I − ( R + G ) \begin{gathered}H=H-120^{\circ}\\ R=I\left(1-S\right) \\ G=I\left[1+{\frac{S\cos H}{\cos(60^{\circ}-H)}}\right] \\ B=3I-(R+G) \end{gathered} H=H120R=I(1S)G=I[1+cos(60H)ScosH]B=3I(R+G)
  3. BR扇区( 24 0 ∘ ⩽ H < 36 0 ∘ 240^{\circ}\leqslant H<360^{\circ} 240H<360): H = H − 24 0 ∘ R = I ( 1 − S ) G = I [ 1 + S cos ⁡ H cos ⁡ ( 6 0 ∘ − H ) ] B = 3 I − ( G + B ) \begin{gathered}H=H-240^{\circ}\\ R=I\left(1-S\right) \\ G=I\left[1+{\frac{S\cos H}{\cos(60^{\circ}-H)}}\right] \\ B=3I-(G+B) \end{gathered} H=H240R=I(1S)G=I[1+cos(60H)ScosH]B=3I(G+B)

6.3伪彩色图像处理

6.3.1灰度分层

灰度分层(有时称为密度分层)和彩色编码技术是伪彩色图像处理的最简单的例子之一。如果一幅图像被描述为三维函数,则分层方法可以看成是放置一些平行于该图像的坐标平面的平面,然后,每个平面在相交的区域中“切割”图像函数。下图显示了使用位于f(x, y) =1处的一个平面把该图像函数切割为两部分的一个例子。
在这里插入图片描述

6.3.2灰度到彩色的变换

import cv2
import numpy as np
import matplotlib.pyplot as plt
import random
import math
import copy
def cv2_show(*args):
    for ttt in range(len(args)):
        img=args[ttt]
        cv2.imshow('img', img)
        cv2.waitKey(0)    
        cv2.destroyAllWindows() 

def plt_show(*args):
    for ttt in range(len(args)):
        img = args[ttt]
        if (len(img.shape) == 3):
            img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
        elif (len(img.shape) == 2):
            img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)
        plt.subplot(331+ttt), plt.imshow(img)
img=cv2.imread('zzx.jpg')
img2 = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
img3=cv2.cvtColor(img2, cv2.COLOR_GRAY2BGR)
plt_show(img,img2,img3)

在这里插入图片描述

上图中分别是:彩图img,彩图转灰度图img2,灰度图转彩图img3
其中,彩图转灰度图时: G R A Y = 0.3 ∗ R + 0.59 ∗ G + 0.11 ∗ B GRAY=0.3*R+0.59*G+0.11*B GRAY=0.3R+0.59G+0.11B
而灰度图转彩图时: [ R , G , B ] = [ G R A Y , G R A Y , G R A Y ] [R,G,B]=[GRAY,GRAY,GRAY] [R,G,B]=[GRAY,GRAY,GRAY]

6.4全彩色图像处理基础

令c代表RGB彩色空间中的一个任意向量: C = [ c R c G c B ] = [ R G B ] \mathcal{C}=\begin{bmatrix}c_R\\ c_G\\ c_B\end{bmatrix}=\begin{bmatrix}R\\ G\\ B\end{bmatrix} C= cRcGcB = RGB
该式指出,c的分量仅是一幅彩色图像在一点处的RGB 分量。我们可以这样认为,彩色分量是坐标(x, y)的函数,表示为: c ( x , y ) = [ c R ( x , y ) c G ( x , y ) c B ( x , y ) ] = [ R ( x , y ) G ( x , y ) B ( x , y ) ] \mathcal{c}(x,y)=\begin{bmatrix}c_R(x,y)\\c_G(x,y)\\c_B(x,y)\end{bmatrix}=\begin{bmatrix}R(x,y)\\G(x,y)\\B(x,y)\end{bmatrix} c(x,y)= cR(x,y)cG(x,y)cB(x,y) = R(x,y)G(x,y)B(x,y)

6.5彩色变换

6.5.1公式

公式: g ( x , y ) = T [ f ( x , y ) ] g(x,y)=T\left[f(x,y)\right] g(x,y)=T[f(x,y)]
关键在于T的设计

6.5.2补色

img=cv2.imread('zzx.jpg')
K=255
n,m,o=img.shape
img2=copy.deepcopy(img)
for i in range(n):
    for j in range(m):
        for k in range(o):
            img2[i][j][k]=K-img[i][j][k]
plt_show(img,img2)

在这里插入图片描述

6.5.3彩色分层

对一幅彩色图像分层的最简方法之一是,把某些感兴趣区域之外的彩色映射为不突出的无确定性质的颜色。如果感兴趣的颜色由宽为w、中心在原型(即平均)颜色点并具有分量( a 1 , a 2 , … , a n a_1, a_2,…,a_n a1,a2,,an)的立方体所包围,则必要的一组变换为

s i = { 0.5 , [ ∣ r j − a j ∣ > W 2 ] 1 ≤ j ≤ n i = 1 , 2 , … , n r i , e l s e s_i=\begin{cases} 0.5, &\Big[|r_j-a_j|>\frac{W}{2}\Big]_{1 \leq j \leq n}\quad i=1,2,\dots,n \\ r_i,& \mathrm{else}\end{cases} si= 0.5,ri,[rjaj>2W]1jni=1,2,,nelse

6.5.5直方图处理

def hist_show(img,name):#展示图片的直方图
    v=img.reshape(-1)
    n=len(v)
    plt.hist(v,weights=[1/n]*n,bins=64, alpha=0.5,label=name)
    plt.legend()
def getImgProbability(img):#  得到概率
    v=img.reshape(-1)
    n=len(v)
    k=1/n
    dt={i:0 for i in range(256)}
    for t in v:
        dt[t]+=k
    return [dt[t] for t in dt]
def histogramEqualization(img): #得到T(r)
    weight2=getImgProbability(img)
    for t in range(1,256):
        weight2[t]+=weight2[t-1]
    return [x*255 for x in weight2]
def imgHistogramEqualization(img):
    Tr=histogramEqualization(img)
    img_t=np.zeros(img.shape)
    for x in range(len(img)):
        for y in range(len(img[x])):
            img_t[x][y]=int(Tr[img[x][y]])
    return img_t.astype(np.uint8)

img=cv2.imread('me.jpg')
imgR,imgG,imgB=img[:,:,0],img[:,:,1],img[:,:,2]
print(imgR.shape)
imgR=imgHistogramEqualization(img[:,:,0])
imgG=imgHistogramEqualization(img[:,:,1])
imgB=imgHistogramEqualization(img[:,:,2])
img2= cv2.merge([imgR,imgG,imgB])
plt_show(img[:,:,0],img[:,:,1],img[:,:,2],
         imgR,imgG,imgB,
         img,img2)

在这里插入图片描述

上图分别为:
原图R通道,原图B通道,原图G通道
R直方图均衡化 ,B直方图均衡化,G直方图均衡化
原图,原图直方图均衡化

hist_show(img[:,:,1],'Before')
hist_show(imgG,'After')

在这里插入图片描述

上图为原图G通道的直方图,和G通道直方图均衡后的直方图

同第三章的直方图处理一样,进行直方图均衡处理。不同点在于彩色是三通道(RGB),需要分别处理后进行合成。

6.6平滑和锐化

6.6.1彩色图像平滑

在一幅RGB彩色图像中,令 S x y S_{xy} Sxy表示中心位于 ( x , y ) (x, y) (x,y)的邻域定义的一组坐标。在该邻域中RGB分量的向量平均值为 c ‾ ( x , y ) = 1 K ∑ ( s , t ) ∈ S s x y c ( s , t ) \overline{\mathfrak{c}}(x,y)=\frac{1}{K}\sum_{(s,t)\in S_{s_{xy}}}{c}(s,t) c(x,y)=K1(s,t)Ssxyc(s,t) 其遵循向量相加原则: C ‾ ( x , y ) = [ 1 K ∑ ( s , t ) ∈ s x y R ( s , t ) 1 K ∑ ( s , t ) ∈ s x y G ( s , t ) 1 K ∑ ( s , t ) ∈ s x y B ( s , t ) ] \overline{\mathcal{C}}(x,y)=\begin{bmatrix}\displaystyle \frac{1}{K}\sum_{(s,t)\in s_{xy}}R(s,t)\\ \displaystyle \frac{1}{K}\sum_{(s,t)\in s_{xy}}G(s,t)\\ \displaystyle \frac{1}{K}\sum_{(s,t) \in s_{xy}}B(s,t)\end{bmatrix} C(x,y)= K1(s,t)sxyR(s,t)K1(s,t)sxyG(s,t)K1(s,t)sxyB(s,t)

6.6.2彩色图像锐化

在第三章灰度变换与空间滤波中,已经提到过锐化,仅需将三通道分别处理后合并即可 ∇ 2 [ c ( x , y ) ] = [ ∇ 2 R ( x , y ) ∇ 2 G ( x , y ) ∇ 2 B ( x , y ) ] \nabla^2\left[c(x,y)\right] = \begin{bmatrix} \nabla^2R(x,y)\\ \nabla^2G(x,y) \\ \nabla^2B(x,y)\end{bmatrix} 2[c(x,y)]= 2R(x,y)2G(x,y)2B(x,y)

def WaveFilter(img,w):
    size=len(w)
    n,m=len(img),len(img[0])
    img2=np.zeros([n,m])
    img=np.pad(img,(size-1)//2)
    for x in range(n):
        for y in range(m):
            f=img[x:x+size,y:y+size]
            img2[x][y]=np.vdot(f,w) +img[x][y]         
            if img2[x][y]<0:
                img2[x][y]=0
            elif img2[x][y]>255:
                img2[x][y]=255
    img2=img2.astype(np.uint8)
    return img2 
img=cv2.imread('caigou.jpg')
imgR,imgG,imgB=img[:,:,0],img[:,:,1],img[:,:,2]
print(imgR.shape)
imgR=WaveFilter(img[:,:,0],[[-1,-1,-1],[ -1,8,-1],[ -1,-1,-1]])
imgG=WaveFilter(img[:,:,1],[[-1,-1,-1],[ -1,8,-1],[ -1,-1,-1]])
imgB=WaveFilter(img[:,:,2],[[-1,-1,-1],[ -1,8,-1],[ -1,-1,-1]])
img2= cv2.merge([imgR,imgG,imgB])
plt_show(img[:,:,0],img[:,:,1],img[:,:,2],
         imgR,imgG,imgB,
         img,img2,img2-img)

在这里插入图片描述

上图分别为:
原图R通道,原图B通道,原图G通道
R拉普拉斯锐化 ,BR拉普拉斯锐化,GR拉普拉斯锐化
原图,原图R拉普拉斯锐化,原图和拉普拉斯锐化图相减

6.7基于彩色的图像分割

6.7.2RGB向量空间中的分割

欧式距离: D ( z , a ) = ∥ z − a ∥ = [ ( z − a ) T ( z − a ) ] 1 2 = [ ( z R − a R ) 2 + ( z G − a G ) 2 + ( z B − a B ) 2 ] 1 2 D(z,\boldsymbol{a})=\|z-\boldsymbol{a}\|=\left[(z-\boldsymbol{a})^{\text{T}}(\boldsymbol{z}-\boldsymbol{a})\right]^{\frac{1}{2}}=\left[(z_R-a_R)^2+(z_G-a_G)^2+(z_B-a_B)^2\right]^{\frac{1}{2}} D(z,a)=za=[(za)T(za)]21=[(zRaR)2+(zGaG)2+(zBaB)2]21
给定一个任意的彩色点,如同采用距离公式那样,通过确定它是否在盒子表面或内部来进行分割。

6.8彩色图像中的噪声

通常,彩色图像的噪声内容在每个彩色通道中具有相同的特性,但噪声对不同的彩色通道所造成的影响不同。一种可能是个别通道的电子学故障。然而,不同的噪声水平像是由每个彩色通道的相对照射强度的差异造成的。例如,在CCD摄像机中红色滤镜的使用将减小用于红色传感器的照射强度。CCD传感器在低照明水平下就是噪声源,因此,这种情况下得到的RGB 图像的红色分量图像与其他两幅分量图像相比往往是噪声源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tf卡和sd卡引脚定义和性能指标

sd卡和tf卡的引脚定义和引脚对应关系&#xff0c;见下图 tf卡的性能 选择tf卡时&#xff0c;我们主要是考虑下边几个性能&#xff0c;这几个性能一般都是可以直接看内存卡看出来的。 注&#xff1a;只介绍通过卡的标识来判断性能&#xff0c;卡的真假自己识别&#xff0c;不考…

踩坑笔记 Spring websocket并发发送消息异常

文章目录 示例代码WebSocketConfig配置代码握手拦截器代码业务处理器代码 问题复现原因分析解决方案方案一 加锁同步发送方案二 使用ConcurrentWebSocketSessionDecorator方案三 自研事件驱动队列&#xff08;借鉴 Tomcat&#xff09; 总结 今天刚刚经历了一个坑&#xff0c;非…

Linux系统基础知识与自学方法

大部分非计算机相关的朋友也经常使用电脑&#xff0c;所以我们频繁接触的是Windows系统。关于这个系统的评价不一&#xff0c;一部分人觉得简洁快捷&#xff0c;一部分人觉得问题&#xff08;病毒、弹窗&#xff09;多多&#xff0c;总之对Windows系统系统的评价参差不齐&#…

案例精述 | FortiEDR双活终端安全方案护航金融多云多分支场景

金融行业多云、多分支等特点&#xff0c;在数字化时代迎来更多安全挑战。尤其在勒索软件等威胁猖獗的大背景下&#xff0c;“安全运营”理念要求金融企业不仅要对威胁攻击“知其然”&#xff0c;还要“知其所以然”。因此&#xff0c;某金融企业希望提升端点安全防护&#xff0…

样本文件的使用方法以及注意事项

经常使用CHS零壹视频系列的朋友们应该对“样本文件”不陌生&#xff0c;在各种案例中我们也强烈建议在视频扫描时加载样本文件&#xff0c;而在视频修复时则样本文件成了必选项。今天我们来聊聊样本文件的作用和使用要求。 什么是样本文件&#xff1f; 从数据恢复广义的角度讲…

分布式文件系统HDFS

分布式文件系统HDFS 分布式文件系统计算机集群结构分布式文件系统的结构分布式文件系统的设计需求 HDFS简介HDFS相关概念块HDFS总体框架HDFS Client名称节点和数据节点名称节点数据节点 第二名称节点HDFS存在的问题 HDFS体系结构HDFS体系结构概述HDFS命名空间管理通信协议客户端…

Python高级系列教程:Python的进程和线程

学习目标 1、了解多任务的概念 2、了解进程的概念以及多进程的作用 3、掌握多进程完成多任务的工作原理及案例编写 4、掌握进程编号的获取方式以及进程使用的注意事项 5、了解线程的概念以及多线程的作用 6、掌握多进程完成多任务的工作原理及案例编写 一、多任务的概念 …

微服务 springcloud 05 hystrix框架,降级,可视化Hystrix dashboard 仪表盘,熔断

01.微服务宕机时&#xff0c;ribbon 无法转发请求 关闭 user-service 和 order-service 02.hystrix框架 03.创建hystrix项目&#xff0c;hystrix与ribbon经常一起出现 第一步&#xff1a;复制 sp06-ribbon 项目&#xff0c;命名为sp07-hystrix 选择 sp06-ribbon 项目&#…

一个Java程序员的C++学习之路

最近接到了一个Windows客户端开发&#xff0c;需要用到C&#xff0c;由于大学嵌入式学习的时候用到了这种东西&#xff0c;虽然没忘记吧&#xff0c;但是还是打算用一周的时间复习一下&#xff0c;下面是我的复习笔记&#xff0c;当然了&#xff0c;也是基于尚硅谷和黑马的笔记…

NLP——Ethics伦理

文章目录 Core NLP ethics conceptsbiasprivacy Group discussionAutomatic Prison Term PredictionAutomatic CV ProcessingLanguage Community Classification Core NLP ethics concepts 自然语言处理&#xff08;NLP&#xff09;的伦理问题是一个日益重要的领域&#xff0c…

007、体系架构之PD

PD PD架构主要功能路由功能 TSO分配TSO概念分配过程时间窗口同步过程 调度总流程信息收集调度的实现调度需求生成调度执行调度调度的基本操作调度的策略 lablelabel与高可用label的配置 PD架构 PD&#xff1a;有高可用和强一致性。 也有leader。使用奇数的节点数量。它需要存储…

10 分钟理解微服务、容器和 Kubernetes及其关系

什么是微服务&#xff1f; 什么是微服务&#xff1f;你应该使用微服务吗&#xff1f;微服务与容器和 Kubernetes 有什么关系&#xff1f;如果这些事情在您的日常生活中不断出现&#xff0c;并且您需要在 10 分钟内进行概述&#xff0c;那么这篇博文适合您。 从根本上讲&#x…

小红书企业号限流原因有哪些,限流因素

作为企业、品牌在小红书都有官方账号&#xff0c;很多人将注册小红书企业号看作是获取品牌宣推“特权”的必行之举。事实真的如此吗&#xff0c;那为什么小红书企业号限流频发&#xff0c;小红书企业号限流原因有哪些&#xff0c;限流因素。 一、小红书企业号限流真的存在吗 首…

SpringBoot中Redis的基础使用

基础使用 首先引入依赖 <!-- redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>redis.clients</g…

中断处理流程以及程序状态寄存器CPSR的本质

文章目录 前言一、当前程序状态寄存器&#xff08;CPSR&#xff09;二、异常的分类2.1 7个异常源2.2 异常的优先级2.3 为什么FIQ比IRQ快&#xff1f;2.4 异常与工作模式的区别 三、异常的处理流程3.1 异常处理机制3.2 进入异常处理流程&#xff1a;3.3 退出异常的处理流程&…

送给蓝初小萌新系列(1)——Linux入侵排查

一、linux系统资源 1、linux被入侵的症状 linux系统资源用户和日志文件和命令篡改启动项和定时任务挖矿脚本分析 2、linux系统资源 2.1、CPU内存磁盘 top -c -o %CPU:查看cpu占用情况&#xff08;按cpu排序&#xff09; top -c -o %MEM:查看内存占用情况&#xff08;按内存…

兼容性测试如何提高网站的可用性?

兼容性测试如何提高网站的可用性? 在现代社会&#xff0c;网站已经成为了人们获取信息、进行交流的主要渠道之一。但是&#xff0c;在网站的设计和开发中&#xff0c;往往会存在兼容性问题&#xff0c;导致不同浏览器或设备的用户无法顺利地访问和使用网站&#xff0c;降低了网…

华为OD机试之最长连续子序列(Java源码)

最长连续子序列 题目描述 有N个正整数组成的一个序列。给定整数sum&#xff0c;求长度最长的连续子序列&#xff0c;使他们的和等于sum&#xff0c;返回此子序列的长度&#xff0c; 如果没有满足要求的序列&#xff0c;返回-1。 输入描述 第一行输入是&#xff1a;N个正整数…

【Spring 核心 | IoC】

IoC IoC 简介定义&#xff1a;IoC 和 DIBeanIoC 容器Ioc IoC容器 IoC 简介 定义&#xff1a; IoC即控制反转&#xff08;Inversion of Control&#xff0c;缩写为 IoC&#xff09;。IoC又称为依赖倒置原则&#xff08;设计模式六大原则之一&#xff09;。 IoC意味着将你设计好…

走近mysql运算符|靠它就够啦

这里写目录标题 比较运算符的使用等号运算符<>安全等于不等于运算符<>/!非符号类型的运算符BETWEEN ANDINLIKEPEGEXP/ RLIKE 逻辑运算符使用位运算符 比较运算符的使用 等号运算符 判断等号两边的值&#xff0c;字符串或表达式是否相等&#xff0c;如果相等则返回…