|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
( t* \7 F4 S4 H
本教程讲解如何将一副RGB图像,提取出图像的R,G,B分量的图像。如何将图像进行颜色的阈值分割。! _- C$ y9 x: O* l" D
# K( c u" ~3 p7 h1 w* z+ R4 {" H6 p原图像
' { \& {8 d% Q* [" o+ L& e% M" g$ @2 F& u' m1 c2 y- p- d& m
* M% p7 m7 R% ?
0 \4 P5 A; R4 l) YMatlab提取RGB颜色分量:
. l$ K2 z* ?# o% b" R7 v
4 g+ f- w: X) l. c0 v我们知道,一张RGB图像,对应着一个M x N x 3 的三维图像。这里的3代表着R,G,B三个分量。其数据类型为uint8类型。数值大小在[0,255]之间。' T9 r6 F7 A1 N [) A
2 C7 d! e0 f' ?! E% B* u# w例如:我们在Matlab中读入本次测试的图像。I=imread(‘test.bmp’);3 w5 Y8 H: _+ z, \7 L8 _' i1 i0 E
* {/ R3 n5 j( a4 ?" O2 [( \ L在工作区中可以看到其数值。
! U/ z5 B5 o D6 l+ ]1 Y6 d" A4 ~9 ^9 r+ r( O0 m4 ?( \
: X" d2 J) {# C8 C# ^/ e- U/ A" p) j" S3 q. d/ f5 f7 i6 }( {
PR=I(:,:,1);%提取红色分量 PG=I(:,:,2);%提取绿色分量 PB=I(:,:,3);%提取蓝色分量/ k5 j8 M# z% {2 B0 b
4 a8 s5 e0 p1 [! T
运行代码:) n/ j! b! Y' p9 X p3 x1 {
' ~2 K e; s2 {! n8 ?" b# S1 O
- 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('提取蓝色分量后');
* m$ D6 q* k1 m # O9 D, ]9 O: i. q5 G9 P
6 S& o* F- p. v7 H9 F( w
运行的效果图:
& _' z! e" G' e$ L9 x% X# v$ F* Q) ]( I
$ k& X$ K. a& y7 X( X
# Q8 q+ u! p/ b u; P0 G( u I: vRGB阈值分割
+ y5 b( V3 j+ d% _' y# P: L+ |! q
上面这种RGB通道分量的提取的效果,并不是我想要的结果。我想要的结果是下图这样的。
4 S* r/ G4 A- j3 s* V& c2 `) a% |/ E6 p" m3 }4 x) Q8 j
( y; H d8 f, P/ |
& t* z, o4 O2 b1 _因此,我们使用图像的阈值分割。
6 _; o: T9 O) `+ u: @
* z+ o5 F% a o# A( z阈值分割的基本思想是确定一个阈值,然后把每个像素点的灰度值和阈 值相比较,根据比较的结果把该像素划分为两类——前景或背景。
- q$ L7 j9 a0 g9 ?5 v' N( i5 \; L% m/ y1 {( F
源自参考文档:
2 O6 [. A# n2 S$ |6 O5 u图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域布局有这种一致属性。这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。
- a: ^; W4 X' z* b5 s( A
1 m Z! Z, t$ o& q) w基本原理是:通过设定不同的特征阈值,把图像象素点分为若干类。' ^/ F# M2 f, c; N3 l
0 G0 N; q* _2 N+ E2 m' t+ q( l- Q% P N; S
常用的特征包括:直接来自原始图像的灰度或彩色特征;由原始灰度或彩色值变换得到的特征。
7 A, ]5 ]* H( u! @% k- U. L0 m0 I% J$ s* T" q
实现代码:3 {9 Y6 ~' \( e& d
5 ~6 C o( J$ V' c( R* j1 H% b: r- 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('提取蓝色分量后');
( U V) W& ~9 A 2 t2 Z8 w- w" c( U7 f
- s* E6 K! I b# q
运行结果图:
5 h+ @* i* r! n! W' |1 V6 M. d/ W9 |# l5 k5 ^4 l
6 S! n/ r# C1 b5 j3 @! q6 y
- s, _& @% X! L6 \图像中去除某一个区域: L$ L9 M% n, l; _
( W2 \+ _7 O1 v8 |$ S, ^比如,我想去除红色分量的矩形。但是这两个红色分量数值非常的相近,不好通过阈值来分割。那我们要如何将红色矩形去除呢?(本篇文章使用最简单的去除方法,下一篇文章则会讲解如何使用形状识别来提取某个图形。)
+ R! C/ {! Q; a' O# I) @" n4 d
+ I# x: r! k3 D# [0 m# P
: K. I V2 c8 I0 E
) n5 Q( Q! Q! [' ~' j4 B解决方法:
5 U C) x! S, V3 V N( R% _- w) x9 r: L* M
这里解决方法很简单,先将原图像,那一块区域赋值成白色,再通过阈值分割就可以将其区分开。( s3 E% |% r4 A3 V. J4 a# |; n9 c
t7 \( i: {0 n4 w9 t/ z' h代码实现:
* Q7 f( Y) M$ h/ m' v% ]4 A- q# b5 [7 f1 o1 y$ c8 S' ^' K
- copy_image = I;
- r = 50:100;%要赋值的行坐标
- c = 20:300;%要赋值的列坐标
- copy_image(r,c,1:3) = 255;
- figure;
- imshow(copy_image);
* L% ?! F, W/ P
- W- `. M) k. K8 `: p) Y2 R N4 a$ F6 E$ |
运行结果:6 \3 X B# G$ t0 [; y/ }
( M u. u9 U3 R. c
- G4 b0 a5 U. V
" L& y, }/ |1 I: h0 n. j在将其进行图像分割,即可将原来的矩形去除:$ O; |& Y* q) _3 g5 q8 L. J1 Q" b$ u( P
7 K6 p* `5 e( J5 c" D
参考文档:
4 Z0 ]8 G7 k; R) ~
, @& w- m* ~* G3 I3 T0 \RGB图像中特定颜色的提取4 z# H7 \! A" _, h' q
) r+ N' j' {5 P0 Q0 [
|
|