找回密码
 注册
8月份电巢直播计划
查看: 185|回复: 1

怎样用Matlab提取图像的RGB分量与实现RGB的阈值分割

[复制链接]

该用户从未签到

发表于 2020-1-16 10:29 | 显示全部楼层 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
1 F* \( w9 O7 z% S- |& G; Q
本教程讲解如何将一副RGB图像,提取出图像的R,G,B分量的图像。如何将图像进行颜色的阈值分割。
9 C  _" F) i6 A7 ]6 C' L: B$ M% L  Y, |; Z. A: n
原图像) e& J# c) e8 B7 M$ K# d- i9 T6 M2 ]

8 v) N* Q% C/ n# ?  ~ 怎样用Matlab提取图像的RGB分量-7.png . B$ x& h' q! |- n9 ]& r

, M1 X4 c9 p- A7 Z: XMatlab提取RGB颜色分量:- Z% _& s3 |6 C- ?5 t
0 e% j$ [! r7 s1 W
我们知道,一张RGB图像,对应着一个M x N x 3 的三维图像。这里的3代表着R,G,B三个分量。其数据类型为uint8类型。数值大小在[0,255]之间。& D# d, J$ M1 y
+ y; t: E8 ?, _
例如:我们在Matlab中读入本次测试的图像。I=imread(‘test.bmp’);
/ L* a# {7 _2 F" \) r" N1 ?' U9 F+ P# Q4 u
在工作区中可以看到其数值。; _. m( o6 G3 A
( L2 y/ g" ^% f
怎样用Matlab提取图像的RGB分量-6.png
! V, S$ f  Y6 }4 s; t' `" b, F* q. G4 ^5 o0 ~/ x
PR=I(:,:,1);%提取红色分量 PG=I(:,:,2);%提取绿色分量 PB=I(:,:,3);%提取蓝色分量
6 ^0 T7 b% `2 o
3 ~( R3 U0 Z8 O9 u  v运行代码:
0 Z7 R3 D( U: P% B" h9 H4 p" U, A
6 z- A, Q2 \" j* M# t, a
  • clc;
  • close all;
  • clear all;
  • I=imread('test.bmp');%要求你.m文件下有test.bmp这个图像文件
  • PR=I(:,:,1);%提取红色分量
  • PG=I(:,:,2);%提取绿色分量
  • PB=I(:,:,3);%提取蓝色分量
  • figure;
  • subplot(2,2,1);imshow(I);title('原图像');
  • subplot(2,2,2);imshow(PR);title('提取红分量后');
  • subplot(2,2,3);imshow(PG);title('提取绿色分量后');
  • subplot(2,2,4);imshow(PB);title('提取蓝色分量后');
  • 4 A& u% x6 @: i4 A* D
  " k4 [- O9 Y' ^" e4 `7 a5 S

- f: [$ Y9 ]2 }2 D+ C运行的效果图:5 T" n  z( @8 u  I

* Z3 J. {0 t6 E/ I- N$ ~ 怎样用Matlab提取图像的RGB分量-5.png 5 }+ T5 K) ?3 c) W1 k9 z  m5 K3 m
& A; `% k0 h5 B7 o+ |* @) I& k
RGB阈值分割$ g" Z$ |( q9 e0 T/ m1 Q, E1 I% I
8 _: [6 h, H# M( {9 }
上面这种RGB通道分量的提取的效果,并不是我想要的结果。我想要的结果是下图这样的。: x5 i6 O3 e4 J; }/ O
" s4 Q+ ]/ {5 u
怎样用Matlab提取图像的RGB分量-4.png
$ F+ M" E) Z8 M+ P' Y5 X
7 U% X# p6 y# ?  m1 ?因此,我们使用图像的阈值分割。: O0 w' x1 v  b$ x
: A. S9 o4 |2 w5 Z, ]
阈值分割的基本思想是确定一个阈值,然后把每个像素点的灰度值和阈 值相比较,根据比较的结果把该像素划分为两类——前景或背景。& F/ U" k, R6 G3 t" ?5 t" l
0 V8 F, C# A0 E, F
源自参考文档:
, X  r) m% U# @图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域布局有这种一致属性。这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。3 m7 e! d" E1 w6 N3 ~2 I$ T
9 p" N8 c$ ]8 d  p- b/ U6 k* g8 X
基本原理是:通过设定不同的特征阈值,把图像象素点分为若干类。. {8 V3 B& `7 j6 |

% e- @  S; u& D: x7 X& ?8 A常用的特征包括:直接来自原始图像的灰度或彩色特征;由原始灰度或彩色值变换得到的特征。
6 b# k, Z* K+ d; y$ E
) W' W; v# ^/ P. x- Z- X& p实现代码:
* [( M2 a0 F% j+ g' c7 N# k" z$ ?; m' V$ ?7 X$ l
  • clc;
  • close all;
  • clear all;
  • I=imread('test.bmp');
  • [m,n,d]=size(I);
  • level=15;%设置阈值
  • level2=70;%设置阈值
  • for i=1:m
  •     for j=1:n
  •         if((I(i,j,1)-I(i,j,2)>level2)&&(I(i,j,1)-I(i,j,3)>level2))
  •             r(i,j,1)=I(i,j,1);
  •             r(i,j,2)=I(i,j,2);
  •             r(i,j,3)=I(i,j,3);
  •        else
  •             r(i,j,1)=255;
  •             r(i,j,2)=255;
  •             r(i,j,3)=255;
  •         end
  •     end
  • end
  • figure;
  • subplot(2,2,1);imshow(I);title('原图像');
  • subplot(2,2,2);imshow(r);title('提取红分量后');%显示提取红分量后的图
  • %提取绿分量,不满足阈值的变为白色
  • for i=1:m
  •     for j=1:n
  •         if((I(i,j,2)-I(i,j,1)>level)&&(I(i,j,2)-I(i,j,3)>level))
  •             g(i,j,1)=I(i,j,1);
  •             g(i,j,2)=I(i,j,2);
  •             g(i,j,3)=I(i,j,3);
  •         else
  •             g(i,j,1)=255;
  •             g(i,j,2)=255;
  •             g(i,j,3)=255;
  •         end
  •     end
  • end
  • subplot(2,2,3);imshow(g);title('提取绿分量后');
  • %提取蓝色分量
  • for i=1:m
  •     for j=1:n
  •         if((I(i,j,3)-I(i,j,1)>level)&&(I(i,j,3)-I(i,j,2)>level))
  •                     b(i,j,1)=I(i,j,1);
  •                     b(i,j,2)=I(i,j,2);
  •                     b(i,j,3)=I(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('提取蓝色分量后');
  • - C4 b( ~/ L* u8 l7 p
         
2 g! e5 }3 E3 w7 |, S( `
2 [; h) `; `" J! {# h7 V% D运行结果图:& O9 S# j3 S% G; D" f# S
: u& b: `6 [7 p$ Z4 |/ W
怎样用Matlab提取图像的RGB分量-3.png
8 S; u! q/ g2 d/ B, u3 T* e9 Z$ N8 n: V/ Q5 K' i' u$ @
图像中去除某一个区域  V+ n6 C8 e/ A+ i. K. m

* G$ m5 ]4 K' W, K, j) y* I4 K! Z比如,我想去除红色分量的矩形。但是这两个红色分量数值非常的相近,不好通过阈值来分割。那我们要如何将红色矩形去除呢?(本篇文章使用最简单的去除方法,下一篇文章则会讲解如何使用形状识别来提取某个图形。), x7 J* x# T! i
4 l( q0 S5 ^8 c" m
怎样用Matlab提取图像的RGB分量-2.png 4 h' G6 A+ C/ n

4 T9 o" {) k% P% Y8 p) T: g6 L+ |0 p( R解决方法:
  b' j7 E; U6 C* u, Z* ~  y. R0 p& r
这里解决方法很简单,先将原图像,那一块区域赋值成白色,再通过阈值分割就可以将其区分开。
/ P7 R: c, z7 ?: }0 C
0 X  ^& T. p( }7 I代码实现:0 {% F; q9 Y# S( j# j

/ X0 t, Y" k9 t; Y0 L  c% q
  • copy_image = I;
  • r = 50:100;%要赋值的行坐标
  • c = 20:300;%要赋值的列坐标
  • copy_image(r,c,1:3) = 255;
  • figure;
  • imshow(copy_image);
  • # v* I/ h% o$ S
    G0 A& e* ?( r, e

# w; m  p2 Y1 w9 S) i( C3 Q. C  P运行结果:* J; E% V. r1 [, u0 R5 S* F4 w

  g! J9 r' a  i; {/ H8 i/ n 怎样用Matlab提取图像的RGB分量-1.png % A  ~7 ?* u+ m
/ o: \" r: Y1 {* J! [3 u; A3 `7 T
在将其进行图像分割,即可将原来的矩形去除:/ [' {% R( _& N1 d+ ^: m0 w, }
6 b. ~; l8 j4 O  k0 L! L2 ^8 S
参考文档:
  ?$ I  w) H8 S2 v9 b! ?" c' P
8 I. s! R$ X2 b& |: u, J: x$ Q& }9 TRGB图像中特定颜色的提取8 b9 C* Y2 n" V; n# e

5 K) H5 u( ?* g; F6 B

该用户从未签到

发表于 2020-1-16 19:38 | 显示全部楼层
用Matlab提取图像的RGB分量与实现RGB的阈值分割
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号 )

GMT+8, 2020-8-11 08:28 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19925233282

快速回复 返回顶部 返回列表