matlab特定颜色提取

matlab特定颜色提取

一、理论基础

在电脑中,RGB的所谓“多少”就是指亮度,并使用整数来表示。通常情况下,RGB各有256级亮度,用数字表示为从0、1、2…直到255。注意虽然数字最高是255,但0也是数值之一,因此共256级。如同2000年到2010年共是11年一样。

按照计算,256级的RGB色彩总共能组合出约1678万种色彩,即256×256×256=16777216。通常也被简称为1600万色或千万色。也称为24位色(2的24次方)。

在led领域利用三合一点阵全彩技术,即在一个发光单元里由RGB三色晶片组成全彩像素。随着这一技术的不断成熟,led显示技术会给人们带来更加丰富真实的色彩感受。

二、MATLAB的实现提取R\G\B分量

在MATLAB中一幅RGB图像可表示为一个MN3的三维矩阵。其中每一个彩色像素都在特定空间位置的彩色图像中对应红、绿、蓝3个分量。分量图像的数据类型决定了他们的取值范围。若一幅RGB图像的数据类型是uint8,则每个分量图像的取值范围是[0,255]。

分量的提取:

PR=RGB_image(:,:,1);提取红色分量

PG=RGB_image(:,:,2);提取绿色分量

PB=RGB_image(:,:,3);提取蓝色分量

三、颜色直方图

直方图中的数值都是统计而来,描述了该图像中关于颜色的数量特征,可以反映图像颜色的统计分布和基本色调;直方图只包含了该图像中某一颜色值出现的频数,而丢失了某象素所在的空间位置信息;任一幅图像都能唯  一的给出一幅与它对应的直方图,但不同的图像可能有相同的颜色分布,从而就具有相同的直方图,因此直方图与图像是一对多的关系;如将图像划分为若干个子区域,所有子区域的直方图之和等于全图直方图;一般情况下,由于图像上的背景和前景物体颜色分布明显不同,从而在直方图上会出现双峰特性,但背景和前景颜色较为接近的图像不具有这个特性。

四、阈值分割

阈值分割的基本思想是确定一个阈值,然后把每个像素点的灰度值和阈 值相比较,根据比较的结果把该像素划分为两类——前景或背景。

图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域布局有这种一致属性。这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。

基本原理是:通过设定不同的特征阈值,把图像象素点分为若干类。

常用的特征包括:直接来自原始图像的灰度或彩色特征;由原始灰度或彩色值变换得到的特征。

五、参数设置
   RGB三个颜色分量取值[0,255],通过设置各分量的阈值,来提取感兴趣的颜色分量。所以问题的关键就是设置合适得阈值。

六、MATLAB实现

1、读取图像,并令其转为uint8数据类型,计算图像像素。

a=imread(‘G:\u=3339291454,635252588&fm=90&gp=0.jpg’);

a=uint8(a);

b=a;

[m,n,d]=size(a);    %计算图像像素

figure(1);

imshow(a);

2、读取原图像的各颜色分量直方图,选出适当阈值进行分割。
 %读取RGB各分量的直方图

figure(2);

subplot(1,3,1);imhist(a(:,:,1));title(‘红色分量’);

subplot(1,3,2);imhist(a(:,:,2));title(‘绿色分量’);

subplot(1,3,3);imhist(a(:,:,3));title(‘蓝色分量’);

3、设置红色分量的阈值。
 通过设置RGB不同的阈值,来提取出需要的颜色信息

%提取红色分量

for i=1:m

for j=1:n

if a(i,j,1)>255 ? %设置红色分量的提取阈值

b(i,j,1)=a(i,j,1);

else b(i,j,1)=0;

end

end

end

figure(3);

subplot(1,3,1);

imhist(b(:,:,1));title(‘提取后红色分量’);

4、同理可以提取绿色、蓝色

5、留下感兴趣的颜色、删去其他颜色

%提取红分量,不满足阈值的变为白色
for i=1:m

for j=1:n

if((a(i,j,1)-a(i,j,2)>level)&&(a(i,j,1)-a(i,j,3)>level))

b(i,j,1)=a(i,j,1);

b(i,j,2)=a(i,j,2);

b(i,j,3)=a(i,j,3);

else b(i,j,1)=255;

b(i,j,2)=255;

b(i,j,3)=255;

end

end

end

subplot(2,2,2);imshow(b);title(‘提取红分量后’);%显示提取红分量后的图像

程序

1、提取RGB颜色
 clc,clear;

%原图像

a=imread(‘G:\u=3339291454,635252588&fm=90&gp=0.jpg’);

a=uint8(a);

b=a;

[m,n,d]=size(a);

figure(1);

imshow(a);

%读取RGB各分量的直方图

figure(2);

subplot(131);imhist(a(:,:,1));title(‘红色分量’);

subplot(132);imhist(a(:,:,2));title(‘绿色分量’);

subplot(133);imhist(a(:,:,3));title(‘蓝色分量’);

%提取各色分量

%提取红色分量

for i=1:m

for j=1:n

ifa(i,j,1)>255   %设置红色分量的提取阈值

b(i,j,1)=a(i,j,1);

elseb(i,j,1)=0;

end

end

end

figure(3);

subplot(1,3,1);imhist(b(:,:,1));title(‘提取后红色分量’);

%提取绿色分量

for i=1:m

for j=1:n

ifa(i,j,2)>255     %设置绿色分量的提取阈值

b(i,j,2)=a(i,j,2);

else b(i,j,2)=0;

end

end

end

subplot(1,3,2);imhist(b(:,:,2));title(‘提取后绿色分量’);

%提取蓝色分量

for i=1:m

for j=1:n

ifa(i,j,3)>0   %设置蓝色分量的提取阈值

b(i,j,3)=a(i,j,3);

elseb(i,j,3)=0;

end

end

end

subplot(1,3,3);imhist(b(:,:,3));title(‘提取后蓝色分量’);

2、提取RGB颜色,并使不满足的颜色删除
%各色分量提取后的图片

figure(4);

imshow(b);

clc,clear;

a=imread(‘5.jpg’);%读取彩图

[m,n,d]=size(a);

b=uint8(a);%转为uint8数据类型,计算图像像素

level=15;%设置阈值

figure(1);

subplot(2,2,1);imshow(a);title(‘原图’);%显示原图

%提取红分量,不满足阈值的变为白色

for i=1:m

for j=1:n

if((a(i,j,1)-a(i,j,2)>level)&&(a(i,j,1)-a(i,j,3)>level))

b(i,j,1)=a(i,j,1);

b(i,j,2)=a(i,j,2);

b(i,j,3)=a(i,j,3);

else b(i,j,1)=255;

b(i,j,2)=255;

b(i,j,3)=255;

end

end

end

subplot(2,2,2);imshow(b);title(‘提取红分量后’);%显示提取红分量后的图

%提取绿分量,不满足阈值的变为白色

for i=1:m

for j=1:n

if((a(i,j,2)-a(i,j,1)>level)&&(a(i,j,2)-a(i,j,3)>level))

b(i,j,1)=a(i,j,1);

b(i,j,2)=a(i,j,2);

b(i,j,3)=a(i,j,3);

else b(i,j,1)=255;

b(i,j,2)=255;

b(i,j,3)=255;

end

end

end

subplot(2,2,3);imshow(b);title(‘提取绿分量后’);%显示提取绿分量后的图

%提取蓝分量,不满足阈值的变为白色

for i=1:m

for j=1:n

if((a(i,j,3)-a(i,j,1)>level)&&(a(i,j,3)-a(i,j,2)>level))

b(i,j,1)=a(i,j,1);

b(i,j,2)=a(i,j,2);

b(i,j,3)=a(i,j,3);

else b(i,j,1)=255;

b(i,j,2)=255;

b(i,j,3)=255;

end

end

end

subplot(2,2,4);imshow(b);title(‘提取蓝分量后’);%显示提取蓝分量后的图


作者:su_yuheng
来源:CSDN
原文:https://blog.csdn.net/su_yuheng/article/details/78547931
版权声明:本文为博主原创文章,转载请附上博文链接!

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值