数字图像处理-彩色图像处理

news2024/11/17 10:05:10

文章目录

  • 一、彩色模型
    • 1.1RGB彩色模型
    • 1.2CMY和CMYK彩色模型
    • 1.3HSI彩色模型
  • 二、伪彩色图像处理
    • 2.1灰度分层
    • 2.2灰度到彩色的变换
  • 三、彩色图像的分割
    • 3.1RGB中的彩色图像分割
    • 3.2彩色边缘检测

一、彩色模型

1.1RGB彩色模型

RGB空间是生活中最常用的一个模型,电视机、电脑的CRT显示器等大部分都是采用这种模型。自然界中的任何一种颜色都可以由红、绿、蓝三种色光混合而成,现实生活中人们见到的颜色大多是混合而成的色彩。RGB彩色空间对应的坐标系统是如图所示的立方体。
在这里插入图片描述
关于RGB三通道的提取在先前的绪论中有简单提及,详情点击这里。
不过那部分是将RGB三通道通过特定的排布合成的彩色图像。要查看彩色图片的RGB信息可以通过opencv读取图像后分别对三个通道的数据进行显示:
在这里插入图片描述
贴个代码:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

# 加载彩色图片
image_path = 'img/image.jpg'
image = Image.open(image_path)

# 分离三个通道
r, g, b = image.split()

# 转换为灰度图像
gray_r = r.convert("L")
gray_g = g.convert("L")
gray_b = b.convert("L")

1.2CMY和CMYK彩色模型

CMY是颜料的原色:青(Cyan)、洋红或品红(Magenta)和黄(Yellow)三种颜色。常用于纸张彩色打印方面。而CMYK即为在CMY彩色模型上加上黑色。CMY和RGB其实是互补的颜色类型,CMY可由RGB转换得到:
[ 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

1.3HSI彩色模型

色调H(Hue):与光波的波长有关,它表示人的感官对不同颜色的感受,如红色、绿色、蓝色等,它也可表示一定范围的颜色,如暖色、冷色等。
饱和度S(Saturation):表示颜色的纯度,纯光谱色是完全饱和的,加入白光会稀释饱和度。饱和度越大,颜色看起来就会越鲜艳,反之亦然。
亮度I(Intensity):对应成像亮度和图像灰度,是颜色的明亮程度。
HSI是指一个数字图像的模型,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和亮度三种基本特征量来感知颜色。HSI模型的建立基于两个重要的事实:
第一个,分量与图像的彩色信息无关;
第二个,H和S分量与人感受颜色的方式是紧密相联的。这些特点使得HSI模型非常适合彩色特性检测与分析。

每个RGB像素的色调分量可用下式得到:
{ θ if  B ≤ G 360 − θ if  B > G \begin{cases}\theta & \text{if } B \leq G \\ 360 - \theta & \text{if } B > G \end{cases} {θ360θif BGif B>G
其中,
θ = arccos ⁡ ( 0.5 ⋅ ( ( R − G ) + ( R − B ) ) ( R − G ) 2 + ( R − B ) ( G − B ) ) \theta = \arccos \left( \frac{0.5 \cdot ( (R - G) + (R - B) )}{ \sqrt{ (R - G)^2 + (R - B)(G - B) } } \right) θ=arccos((RG)2+(RB)(GB) 0.5((RG)+(RB)))
饱和度分量由下式得出:
S = 1 − 3 ⋅ min ⁡ ( R , G , B ) R + G + B S = 1 - \frac{3 \cdot \min(R, G, B)}{R + G + B} S=1R+G+B3min(R,G,B)
强度分量由下式得出:
I = R + G + B 3 I = \frac{R + G + B}{3} I=3R+G+B
在这里插入图片描述
贴个代码:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import colorsys

image_path = 'img/image.jpg'
image = Image.open(image_path)

rgb_array = np.array(image)

rgb_array = rgb_array / 255.0

hsi_array = np.zeros_like(rgb_array)

# 转换RGB到HSI
for i in range(rgb_array.shape[0]):
    for j in range(rgb_array.shape[1]):
        r, g, b = rgb_array[i, j]
        h, s, i_val = colorsys.rgb_to_hsv(r, g, b)
        hsi_array[i, j] = [h, s, i_val]

二、伪彩色图像处理

2.1灰度分层

伪彩色图像处理也叫假彩色图像处理,根据一定的准则对灰度值赋以彩色的处理。

灰度级分层是数字图像处理中的一种方法,用于将图像中的像素按照灰度值进行分组或分层处理。两大基本的灰度级分层方法是:

  • 二值化(Binarization): 二值化是将图像中的像素根据其灰度值分为两个不同的组(通常是黑色和白色,或者前景和背景)。这是最简单和常用的分层方法之一。通过设置一个阈值,高于阈值的像素被分配到一组,低于阈值的像素被分配到另一组。这可以用来创建二值图像,例如文本提取、图像分割等应用。

  • 多阈值分割(Multilevel Thresholding): 多阈值分割是一种将图像像素分为多个灰度级别的分层方法。与二值化不同,多阈值分割使用多个阈值来将像素分成多个组。这种方法通常用于图像分割、物体检测、图像增强等应用,可以在图像中识别不同的目标和特征。

在这里插入图片描述
贴个代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt

image_path = 'img/gray.jpg'
gray_image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)

# 二值化
binary_threshold = 128
_, binary_image = cv2.threshold(gray_image, binary_threshold, 255, cv2.THRESH_BINARY)

# 八值化
eight_threshold = 32
eight_image = np.floor_divide(gray_image, eight_threshold) * eight_threshold

2.2灰度到彩色的变换

灰度图像转为伪彩色图像,效果如下:
在这里插入图片描述
贴个代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt

image_path = 'img/gray.jpg'
gray_image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)

pseudo_image = cv2.applyColorMap(gray_image, cv2.COLORMAP_JET)

三、彩色图像的分割

彩色空间分割是基于单色图像(灰度图)分割技术在不同颜色通道上实现的。灰度图分割技术常见的有:直方图阀值化、特征聚类、边缘检测、基于区域的、模糊技术、神经网络等。灰度图的分割方法都是基于区域像素的非连续性或相似性。基于非连续性的方法主要是为了检测孤立的点、边缘、线(灰度突然变化的地方)。基于相似性的方法包括阀值、聚类、区域分割合并等。

3.1RGB中的彩色图像分割

RGB 彩色图像分割是一种图像处理技术,旨在将彩色图像分割成具有语义或结构意义的不同区域或对象。彩色图像由红色(R)、绿色(G)和蓝色(B)三个颜色通道组成,每个像素都由这三个通道的强度值组成。彩色图像分割旨在利用颜色信息和强度信息,将图像中的不同物体或区域进行分离和标记,以便进一步的分析和处理。
RGB 彩色图像分割可以分为不同的类型,每种类型都有其特定的应用领域和目标。以下是一些常见的 RGB 彩色图像分割类型:

1.基于颜色信息的分割: 这种方法利用像素的颜色信息,将图像中具有相似颜色的像素分为一组。它可以用于检测色彩鲜明的物体,如交通标志、水果等。
2.基于纹理信息的分割: 纹理分割利用图像中不同区域的纹理特征来进行分割。例如,可以用于区分不同类型的材质,如草地、砖墙等。
3.基于强度信息的分割: 这种方法使用图像的强度信息(通常是灰度值)来进行分割。它适用于图像中强度变化较大的区域,如阴影、光照变化等。
4.基于混合信息的分割: 这种方法综合利用颜色、纹理和强度等多种信息来进行分割,从而更准确地识别和分离不同的区域。
5.基于区域的分割: 这种方法首先将图像划分为不同的区域,然后根据区域内的特征对每个区域进行分割。区域可能根据像素的相似性、连通性等进行定义。
6.语义分割: 这是一种高级的分割方法,旨在将图像中的每个像素分配到具有语义意义的类别中,如人、车、树等。它在计算机视觉和深度学习中具有重要应用。

RGB中的彩色图像分割通过将彩色图像转换到 HSV 颜色空间,然后通过设定颜色范围(在 HSV 空间中定义)进行颜色分割。
在这里插入图片描述
贴个代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 读取彩色图像
image_path = 'img/image.jpg'
color_image = cv2.imread(image_path)

# 转换颜色空间为 HSV
hsv_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2HSV)

# 定义颜色分割的范围
lower_range = np.array([30, 50, 50])
upper_range = np.array([120, 255, 255])

# 创建掩码
mask = cv2.inRange(hsv_image, lower_range, upper_range)

# 进行分割
segmented_image = cv2.bitwise_and(color_image, color_image, mask=mask)

3.2彩色边缘检测

彩色图像边缘检测是一种在彩色图像中识别边缘和轮廓的图像处理技术。边缘是图像中颜色、亮度或纹理等方面的不连续性区域,通常代表着物体之间的界限或重要的特征。彩色图像边缘检测的目标是找到这些边缘,以帮助分析、识别和处理图像中的物体和结构。
在彩色图像中,每个像素有三个颜色通道(红、绿、蓝),因此彩色图像边缘检测相对于灰度图像边缘检测更加复杂。通常,彩色图像边缘检测可以通过以下步骤来实现:

1.颜色空间转换: 首先,将彩色图像从 RGB(红、绿、蓝)颜色空间转换为其他颜色空间,例如灰度(Grayscale)或 HSV(色调、饱和度、亮度)。颜色空间转换有助于减少处理的复杂性并提取出图像的亮度信息。
2.灰度化: 如果将图像转换为灰度图像,这一步骤将在颜色通道上进行加权平均,以便在单个通道中表示图像的亮度信息。这有助于简化后续的边缘检测过程。
3.边缘检测算法: 应用边缘检测算法,例如 Canny、Sobel、Prewitt 等,来检测图像中的边缘。这些算法通常基于图像亮度或梯度的变化来识别边缘。
4.边缘增强: 对检测到的边缘进行增强,以便更好地突出图像中的轮廓。
5.后处理: 根据应用的需求,可能需要进行降噪、连接断裂的边缘、滤除不重要的边缘等后处理步骤。

彩色图像边缘检测在计算机视觉、图像处理、模式识别等领域具有广泛的应用。它可以用于目标检测、物体识别、图像分割、图像增强、图像分析等任务。边缘检测结果通常用于提取图像中的重要特征,为进一步的图像处理和分析提供基础。
在这里插入图片描述
贴个代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt

image_path = 'img/image.jpg'
color_image = cv2.imread(image_path)

gray_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2GRAY)

edges = cv2.Canny(gray_image, threshold1=100, threshold2=200)

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

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

相关文章

2D视觉检测算法整理

1.ROI pooling 和 ROI align的区别 ROI pooling第一步根据候选区域找特征图的位置,可能不是刚好对应,需要一次量化,如上图所示,第二次是特征图需要转化为特定的大小,这时候pooling可能也不能正好整除,所以第…

Vue3状态管理库Pinia——实现简易版购物车

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

重排序问题(详细说明指令重排序)

在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。 重排序分3种类型。 编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。 指令级并行的重排序。现代处理器采用了指令级并行技术&…

MySQL主从复制原理以及实操

一、MySQL主从复制原理: 1、MySQL将数据变化记录到二进制日志中; 2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中; 3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数…

在Geogle Drive 上面下载压缩的文件

需要使用到 OCC3D 上面 的Waymo Occupancy 真值。 Occ3d 应该是一个文件夹里面有很多 个压缩包,如果直接下载 会下载很多个文件。 双击点进去 选择好对应的序列再进行下载。 这里的 000 001 应该是对应的 waymo 的相机序列。 waymo 的相机序列也是798 个序列

【数据结构】常见的排序算法

常见的排序算法 常见的排序算法插入排序之直接插入排序时间复杂度特性总结 插入排序之希尔排序时间复杂度 选择排序之直接选择排序特性总结 选择排序之堆排序时间复杂度特性总结 交换排序之冒泡排序特性总结 交换排序之快速排序hoare版本挖坑法双指针法快速排序的优化1&#xf…

(YouTube)KDBA QML 学习笔记1

&#xff08;YouTube&#xff09;KDBA QML 学习笔记 旧版本(QML文件介绍) main.qml import QtQuick 2.0Text {text: "Hell World" }main.cpp #include <QtQuick>int mian(int argc, char *argn[]) {QGuiApplication app(argc, argv);//QT开始 QQuickvi…

maven下载安装及初次使用相关配置

maven下载按照及初次使用相关配置 一、下载 与安装 下载完解压放在文件夹中即可&#xff01; 依赖Java&#xff0c;需要配置JAVA_HOME设置MAVEN自身的运行环境&#xff0c;需要配置MAVEN_HOME&#xff08;参考安装java&#xff09;测试环境配置结果 MVN测试成功&#xff01…

大牛练成记:用JavaScript徒手写出一个日期选择插件

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;100个JavaScript的小应用。 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收…

OpenMMLab MMDetectionV3.1.0-SAM(环境安装、模型测试、训练以及模型后处理工具)

OpenMMLab Playground 概况 当前通用目标检测的研究方向正在朝着大型多模态模型发展。除了图像输入之外&#xff0c;最近的研究成果还结合了文本模式来提高性能。添加文本模态后&#xff0c;通用检测算法的一些非常好的属性开始出现&#xff0c;例如&#xff1a; 可以利用大量…

【多线程系列-04】深入理解java中线程间的通信机制

多线程系列整体栏目 内容链接地址【一】深入理解进程、线程和CPU之间的关系https://blog.csdn.net/zhenghuishengq/article/details/131714191【二】java创建线程的方式到底有几种&#xff1f;(详解)https://blog.csdn.net/zhenghuishengq/article/details/127968166【三】深入…

如何通过 5 步激活策略扩大用户群

假设&#xff0c;你现在是一个“深藏功与名”的增长黑客。前期你表现非常好&#xff0c;做了一些拉新实验&#xff0c;每天都有上千用户进入到产品。团队成员和家人朋友都非常开心你们的产品增长终于有了起色。 然而&#xff0c;如果你不重视拉新&#xff08;acquisition&…

TI的IWR6843跑3D People Tracking(3D人体检测追踪实验)demo的上手教程

1.硬件准备 1.IWR6843板子 2.两个USB转串口模块&#xff08;因为我的是自己做的板子&#xff0c;板子上没有集成USB转串口芯片&#xff09; 2.软件准备 1.最新版本的CCS&#xff0c;注意后缀没有THEIA https://www.ti.com/tool/CCSTUDIO?DCMPdsp_ccs_v4&HQSccs 2.最新…

速通pytorch库

速通pytorch库&#xff08;长文&#xff09; 前言 ​ 本篇文章主要为那些对于pytorch库不熟悉、还没有上手的朋友们准备&#xff0c;梳理pytorch库的主要内容&#xff0c;帮助大家入门深度学习最重要的库之一。 目录结构 文章目录 速通pytorch库&#xff08;长文&#xff09;1.…

13 springboot项目——准备数据和dao类

13.1 静态资源下载 https://download.csdn.net/download/no996yes885/88151513 13.2 静态资源位置 css样式文件放在static的css目录下&#xff1b;static的img下放图片&#xff1b;template目录下放其余的html文件。 13.3 创建两个实体类 导入依赖&#xff1a;lombok <!…

35岁后的测试工程师出路?测试工程师能干多久?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 你有没有一刹那意…

服务器硬件、部署LNMP动态网站、部署wordpress、配置web与数据库服务分离、配置额外的web服务器

day01 day01项目实战目标单机安装基于LNMP结构的WordPress网站基本环境准备配置nginx配置数据库服务部署wordpressweb与数据库服务分离准备数据库服务器迁移数据库配置额外的web服务器 项目实战目标 主机名IP地址client01192.168.88.10/24web1192.168.88.11/24web2192.168.88…

产业大数据应用:精准剖析区域产业,摸家底 明方向 促发展

随着信息技术的飞速发展&#xff0c;大数据和新一代信息技术的崛起&#xff0c;这些技术的应用正在逐渐渗透到各个领域&#xff0c;在区域产业发展上&#xff0c;他们不仅为区域产业诊断分析带来了高效的工具&#xff0c;更为区域制定产业发展战略和政策提供了有效的数据支撑。…

活动预告 | 中国数据库联盟(ACDU)中国行第二站定档杭州,邀您探讨数据库技术与实践!

数据库技术一直是信息时代中不可或缺的核心组成部分&#xff0c;随着信息量的爆炸式增长和数据的多样化&#xff0c;其重要性愈发凸显。作为中国数据库联盟&#xff08;ACDU&#xff09;的品牌活动之一&#xff0c;【ACDU 中国行】在线下汇集数据库领域的行业知名人士&#xff…

Keil出现Flash Timeout.Reset the Target and try it again.我有一种解决方法

2.解决方法 网上查找了找原因&#xff0c;是因为之前代码设置了读保护功能。 读保护即大家通常说的“加密”&#xff0c;是作用于整个Flash存储区域。一旦设置了Flash的读保护&#xff0c;内置的Flash存储区只能通过程序的正常执行才能读出&#xff0c;而不能通过下述任何一种…