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

文章目录

  • 一、彩色模型
    • 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 colorsysimage_path = 'img/image.jpg'
image = Image.open(image_path)rgb_array = np.array(image)rgb_array = rgb_array / 255.0hsi_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 pltimage_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 pltimage_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 pltimage_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.mzph.cn/news/19371.shtml

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

相关文章

手写自定义的spring-boot-start

需求&#xff1a;手写一个加密的spring-boot-start&#xff0c;按着用户定义的加密算法&#xff08;可选&#xff1a;MD5、SHA&#xff09;去加密内容 新建一个maven项目 新建好的项目结构和pom.xml如图 添加pom.xml 完整的pom.xml文件 <?xml version"1.0" …

25.6 matlab里面的10中优化方法介绍——模拟退火算法(matlab程序)

1.简述 相信没有相关物理知识背景的小伙伴看到“退火”二字是一脸懵逼的...固体的退火过程指的是将固体加热至足够高的温度&#xff0c;再使其慢慢冷却的过程。在加热过程中&#xff0c;原本有序排列的内部粒子开始无序运动&#xff0c;此时固体的内能不断增大&#xff1b;而在…

大数据面试题:HBase的RegionServer宕机以后怎么恢复的?

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 可回答&#xff1a;1&#xff09;HBase一个节点宕机了怎么办&#xff1b;2&#xff09;HBase故障恢复 参考答案&#xff1a; 1、HBase常见故障 导…

SpringMVC学习记录

SpringMVC技术与servlet技术功能等同&#xff0c;均属于web层开发技术 SpringMVC简介 SpringMVC概述 SpringMVC是一种基于Java实现MIVC模型的轻量级web框架 优点 使用简单&#xff0c;开发便捷&#xff08;相比于servlet)灵活性强 SpringMVC是一种表现层框架技术 Spring…

忘记数据库密码如何处理

windows 5.6.51版本及以前 #当前账号设置密码 set password password(123456); #当前账号取消密码 set password ; &#xff08;1&#xff09;用管理员身份打开控制台输入 net stop m5&#xff08;我的电脑MySQL名字为m5&#xff0c;根据自己的更改&#xff09; &#xff08;…

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

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

Redis 高可用之持久化

目录 一、Redis 高可用 1.1 什么是高可用 1.2 Redis的高可用技术 二、Redis持久化 2.1 持久化的功能 2.2 Redis提供两种方式进行持久化&#xff1a; 三、RDB持久化 3.1 触发条件 &#xff08;1&#xff09;手动触发 &#xff08;2&#xff09;自动触发 &#xff08;3…

UG\NX 二次开发 选择相切面、相邻面的选择面控件

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; 有群友问“UFUN多选功能过滤面不能选择相切面或相邻面之类的吗&#xff1f;” 这个用Block UI的"面收集器"就可以&#xff0c;ufun函数是不行的。 效果&am…

12-4_Qt 5.9 C++开发指南_创建和使用共享库

文章目录 1. 创建共享库2. 使用共享库2.1 共享库的调用方式2.2 隐式链接调用共享库2.3 显式链接调用共享库 1. 创建共享库 除了静态库&#xff0c;Qt 还可以创建共享库&#xff0c;也就是 Windows 平台上的动态链接库。动态链接库项目编译后生成 DLL 文件&#xff0c;DLL 文件…

docker 保存和载入镜像

查看本机docker镜像 docker images保存镜像 docker save -o /home/space/work1/docker_qnx7.1.tar.gz a01ee6d74c36复制镜像到其他服务器 scp /home/space/work1/docker_qnx7.1.tar.gz XXXIP:/home/dell/work1/登录新 服务器操作 docker load -i docker_qnx7.1.tar.gz载入后…

网络安全/信息安全—学习笔记

一、网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

MySQL 的解析器以及 MySQL8.0 做出的改进 | StoneDB技术分享 #2

设计&#xff1a;小艾 审核&#xff1a;丁奇 编辑&#xff1a;宇亭 作者&#xff1a;柳湛宇&#xff08;花名&#xff1a;乌淄&#xff09; 浙江大学-软件工程-在读硕士、StoneDB 内核研发实习生 一、MySQL 的解析器 MySQL 所使用的解析器&#xff08;即 Lexer 和 Parser …

【Git】git reset 版本回退 git rm

前言 在日常开发时&#xff0c;我们经常会需要撤销之前的一些修改内容或者回退到之前的某一个版本&#xff0c;这时候reset命令就派上用场了 git reset 用法1——所有文件回退到某个版本 1、使用git reflog查看要回退的commit对象 2、使用git reset [-- hard/soft /mixed] …

算法通关村第二关——反转链表白银笔记

文章目录 1.链表指定区间翻转2.两两交换链表中的节点 1.链表指定区间翻转 LeetCode 92.反转链表 解法一&#xff1a;头插法。利用虚拟节点进行反转&#xff0c;因为头节点有可能发生变化&#xff0c;比如 left1 那么需要 dummyNode.next 记录头结点&#xff0c;使用虚拟头节点…

Arcgis通过模型构建器计算几何坐标

模型 模型中&#xff0c;先添加字段&#xff0c;再计算字段 计算字段 模型的计算字段中&#xff0c;表达式是类似这样写的&#xff0c;其中Xmin表示X坐标&#xff0c;Ymin表示Y坐标 !Shape.extent.Xmin!类似计算面积 !shape.area!

突破游戏行业天花板,“技术外溢”成趋势

文 | 螳螂观察 作者 | 余一 受游戏版号发放的“放缓”、人口结构的调整&#xff0c;过去两年国内游戏行业过得并不算好。前不久据相关机构发布的数据显示&#xff0c;2022年中国游戏市场实际销售收入2658.84亿元&#xff0c;同比减少306.29亿元&#xff0c;下降10.33%。且游戏…

创建个人博客(在文章的列表页,根据文章标题和文章内容实现搜索)

1. 在视图文件增加搜索表单&#xff1a; 在文章列表页的视图文件中&#xff0c;增加一个搜索表单&#xff0c;包含一个文本搜索框和一个提交按钮 <% form_tag articles_path, method: :get do %><% text_field_tag :title, params[:title], placeholder: "搜索…

海康视频插件VideoWebPlugin在vue中的实现

一,将js文件放在public文件下 二,在index中全局引入 三.在视频页面写方法,创建实例,初始化,我写的是1*4屏的 <template><!--视频窗口展示--><div idplayWnd classNameplayWnd refplayWnd styleleft: 0; bottom: 0;height: 902px;width: 60vw></div>&…

Eureka 学习笔记2:EurekaClient

版本 awsVersion ‘1.11.277’ EurekaClient 接口实现了 LookupService 接口&#xff0c;拥有唯一的实现类 DiscoveryClient 类。 LookupService 接口提供以下功能&#xff1a; 获取注册表根据应用名称获取应用根据实例 id 获取实例信息 public interface LookupService<…

HTTP杂谈之Referer和Origin请求头再探

一 关于Referer和Origin的汇总 1) 知识是凌乱的,各位看官看个热闹即可2) 内容不断更新1、理解有盲区,需要及时纠正2、内容交叉有重复,需要适当删减3、扩展视野3) 以下内容都与Referer和Origin请求头有关联 nginx防盗链 HTTP杂谈之Referrer-Policy响应头 iframe标签referre…