找回密码
 注册

扫一扫,访问微社区

查看: 28|回复: 1

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

6 j+ w5 G6 H3 i本教程讲解如何将一副RGB图像,提取出图像的R,G,B分量的图像。如何将图像进行颜色的阈值分割。
( v  G5 u' E3 F/ B7 J4 H* h, b; w, \& z
原图像% F* e( t: X, A* Z; y; y& {3 x

' s+ G. Y+ \! ^& `1 X1 Z1 {: D 怎样用Matlab提取图像的RGB分量-7.png
9 N6 e; ^8 t) x5 h( A. K0 a/ u# k# I6 ^
Matlab提取RGB颜色分量:. ^. [3 \, I0 f8 f) |! W/ @% ^0 {

* a) C1 {3 H3 t7 S- A; r我们知道,一张RGB图像,对应着一个M x N x 3 的三维图像。这里的3代表着R,G,B三个分量。其数据类型为uint8类型。数值大小在[0,255]之间。
$ k) z+ p6 y' d8 N! }! Z1 z3 v0 ~$ T
例如:我们在Matlab中读入本次测试的图像。I=imread(‘test.bmp’);
2 ?4 b, U+ r/ L8 L+ q/ I- u
0 {) w* p2 s/ I& n7 f' A1 M& K5 i在工作区中可以看到其数值。
. \% @1 O) k7 J. V, ], a: h' m7 N0 f0 P& M7 U4 @
怎样用Matlab提取图像的RGB分量-6.png 5 F- m, I/ h* p+ e

: I, Z0 p% j. W7 u8 i" r3 @# Z4 MPR=I(:,:,1);%提取红色分量 PG=I(:,:,2);%提取绿色分量 PB=I(:,:,3);%提取蓝色分量% R3 b: I0 u) b: L6 _5 |3 Z& j

% b% u$ O; b1 j运行代码:' q1 m2 B9 T4 F2 @5 e. n

! S/ O( ?% u) i5 k
  • 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('提取蓝色分量后');
  • 7 ~2 G6 }7 f) N4 \- A2 A
  
: |, z6 g3 }8 B0 \  Q' B+ M- ^  _; W/ R$ A, N
运行的效果图:
  N' n6 c' V. }7 ]  t2 P: m5 K# M
怎样用Matlab提取图像的RGB分量-5.png , a1 w& c% n; q% G
1 R+ T+ w, x" e# F: v8 H( j, T+ D
RGB阈值分割9 O% i" m. Z$ C
! ?7 s- o: e2 T
上面这种RGB通道分量的提取的效果,并不是我想要的结果。我想要的结果是下图这样的。# g/ r- l+ l  e! o3 c

2 x% }( {/ s2 T7 `" a 怎样用Matlab提取图像的RGB分量-4.png
8 T# \2 h6 f7 t$ e) D# t# o
2 @& @- J" i! t3 c2 m: f; d3 M' h因此,我们使用图像的阈值分割。: l# y' e2 W# b- u

; ?6 N1 j0 }" K3 M, W6 a& V阈值分割的基本思想是确定一个阈值,然后把每个像素点的灰度值和阈 值相比较,根据比较的结果把该像素划分为两类——前景或背景。  b. B) y* Y1 ^7 d* n* @

) z' Q7 w( O9 j6 G# T$ [% A源自参考文档:
# E% `1 L9 w% i2 x图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域布局有这种一致属性。这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。3 u) [  ?0 @- w  o  Z1 B3 f% Q
* d( s9 A2 {) p2 d+ y
基本原理是:通过设定不同的特征阈值,把图像象素点分为若干类。/ v: D# O$ I$ Z1 ], m
  ~6 P  L5 u: b+ w2 ~: `
常用的特征包括:直接来自原始图像的灰度或彩色特征;由原始灰度或彩色值变换得到的特征。* y5 k$ r0 e" L3 Z8 l0 ^

  v& s& S4 U, |5 K) Q- w7 |# q: ]( q实现代码:
; l7 L3 e5 k- x" z9 m4 E) Y. Q1 T1 _0 b  ^6 r3 m
  • 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('提取蓝色分量后');
  • 7 u1 }& M0 f7 g7 Y; R! ^- M% `
         
# _$ V, S+ f9 q! n/ S2 i) q$ k- W& e1 A& n! _5 |/ @8 h
运行结果图:0 N! z2 O  g9 y' L; O
0 I' v& D7 F. \& K. G+ S5 V9 n4 I
怎样用Matlab提取图像的RGB分量-3.png
/ R. A; z) d+ ?! J: i; R0 c# f$ Y0 ^- q1 y
图像中去除某一个区域
) |: A1 E  [: p7 M. y& j' _' ?0 S4 U$ {  a5 N5 O* ^( H0 H& D0 T' k; @4 p
比如,我想去除红色分量的矩形。但是这两个红色分量数值非常的相近,不好通过阈值来分割。那我们要如何将红色矩形去除呢?(本篇文章使用最简单的去除方法,下一篇文章则会讲解如何使用形状识别来提取某个图形。)
6 \/ [5 l) J* f. c" p* r' J; f$ |. k) [
怎样用Matlab提取图像的RGB分量-2.png ( ]. A) @. p9 Q1 b- i% S

( ~' G  \  B) w, x解决方法:
! U( O8 `1 r& O/ V
0 C5 |0 i/ B5 Z. l9 d这里解决方法很简单,先将原图像,那一块区域赋值成白色,再通过阈值分割就可以将其区分开。0 G# }/ g: P, m; k

- ^8 z( a9 |6 l  E' s代码实现:
- r& ^( w1 p/ `! P2 C; O* H. C4 T9 s
  • copy_image = I;
  • r = 50:100;%要赋值的行坐标
  • c = 20:300;%要赋值的列坐标
  • copy_image(r,c,1:3) = 255;
  • figure;
  • imshow(copy_image);

  • 0 N/ {8 |* m3 N+ e0 C8 {* j( I
  5 Y" _" z3 B, x3 ~8 F' j
7 u- ?5 y. c1 B- Y# k" x
运行结果:
5 m# N" n/ M! `! x5 y& [3 o, i$ ?; w& v2 n- E( h4 K6 O
怎样用Matlab提取图像的RGB分量-1.png
$ d9 L* D, b  _8 j" v& U% n4 E- Q8 Y1 ?" @2 Q) |% o5 T, _
在将其进行图像分割,即可将原来的矩形去除:
4 g. F# M/ \; q; W; ]7 m& u- Z4 H% q& @
参考文档:! {- `, S) }: `) k4 {- a( H5 \

1 q4 ~! V  L1 Q! a- C; S: J: ?. SRGB图像中特定颜色的提取
: m# S! O6 `, t: o$ B3 O( i+ [. u9 w( Y) C9 T

该用户从未签到

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

本版积分规则

EDA365公众号

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

GMT+8, 2020-1-24 15:24 , Processed in 0.093750 second(s), 22 queries , Gzip On.

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

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

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