|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
/ |9 [; {9 M4 H- q' A' d/ C本教程讲解如何将一副RGB图像,提取出图像的R,G,B分量的图像。如何将图像进行颜色的阈值分割。5 K2 |5 \ y6 S; {
* f9 l. t5 c$ G) D
原图像6 f5 b; @# ~! q7 }
* N/ }- w% W [ [$ [# r# r4 ?
1 R/ y: a7 J1 R% T9 g9 t2 K
$ x: M# n6 U) g/ @( w
Matlab提取RGB颜色分量:
9 S0 O" Y+ G% K- c( d8 C
: n2 w+ c, \: y h& [我们知道,一张RGB图像,对应着一个M x N x 3 的三维图像。这里的3代表着R,G,B三个分量。其数据类型为uint8类型。数值大小在[0,255]之间。
( s+ i; m3 T9 Y( [
T+ P, u6 g0 P9 [例如:我们在Matlab中读入本次测试的图像。I=imread(‘test.bmp’);( a i9 S+ _7 X6 p
* ]. g. G5 F7 N; G2 V. K& [+ M
在工作区中可以看到其数值。3 S5 Y0 ^. \! ]
5 ?* K5 f0 w9 i3 k' h! E' l) C
, ~* n* E; s% h: c
) f2 a" d9 E6 u+ d
PR=I(:,:,1);%提取红色分量 PG=I(:,:,2);%提取绿色分量 PB=I(:,:,3);%提取蓝色分量/ l. _3 @! E. M9 ?. e3 |
$ [& g3 T( H) @( q: F
运行代码:( {3 t( p- t3 k3 A2 t! |
( X9 D( c! g1 u1 G
- 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('提取蓝色分量后');
/ h& H- U( o n5 j6 R/ m* U
, `$ Y9 G# N7 S! O' p# |
l8 h. D3 K7 d# E8 B, Q* M运行的效果图:
. @. X. @% K$ J; Y* }, s
" @' K6 p- w$ [' b
. O9 \; s& E ]& P! y$ q2 b- x+ I# a
5 o5 m7 U: g) q/ ZRGB阈值分割
+ O$ a1 {& K/ e) c" W0 J0 B; L5 z2 Z/ |3 V
上面这种RGB通道分量的提取的效果,并不是我想要的结果。我想要的结果是下图这样的。
1 ~: O/ W- s6 b _) l4 @5 J8 W' F, j' I+ \- h1 R( s
6 j& `% p. G* U$ g/ J
# N# b. o. L- m0 W, j因此,我们使用图像的阈值分割。( t( y1 b6 `* I8 w6 O
) ~* o) Q" D7 X0 a% `8 M阈值分割的基本思想是确定一个阈值,然后把每个像素点的灰度值和阈 值相比较,根据比较的结果把该像素划分为两类——前景或背景。
! ~9 |! Z5 E- m( e& E0 w8 q! ~% g4 B7 y& v
源自参考文档:- H3 Q# R3 \1 W- n& g. i6 F; F
图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域布局有这种一致属性。这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。
* n5 X- _( Y$ `9 A* F* S/ Y
! U: l$ Q* e3 D' C- M基本原理是:通过设定不同的特征阈值,把图像象素点分为若干类。1 E6 j* e/ n& j+ @ @. B: M
* ?4 e( R# k1 |; m' m; ?$ m
常用的特征包括:直接来自原始图像的灰度或彩色特征;由原始灰度或彩色值变换得到的特征。
9 i5 s% V' U" q W9 M) M6 n& o
: x. p! w* e7 l A& M实现代码:
+ n# D& Y7 d& a+ D/ i. |5 x# r4 R% C4 H! r# n
- 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('提取蓝色分量后');
1 v( Q* X3 w! Z8 \5 O. S; l# [/ X 0 L8 N: j" \' j$ j/ P% H. z
% h3 t" @& I. \! U" z运行结果图:
, ?9 i+ b+ S' o1 [. A
! Y5 R! O, }9 _8 A L. x9 V! g
2 _) p. Q; m" U A+ [- Z( B; N$ Z& Z& U3 @5 S
图像中去除某一个区域
0 b1 q0 k+ t5 T( x& i# U6 H$ K$ A9 I& H& N$ G& Z* Y* W0 ~3 v: A
比如,我想去除红色分量的矩形。但是这两个红色分量数值非常的相近,不好通过阈值来分割。那我们要如何将红色矩形去除呢?(本篇文章使用最简单的去除方法,下一篇文章则会讲解如何使用形状识别来提取某个图形。)
" m7 u# L6 a7 U5 b0 V) J) x3 I3 e3 k+ B |; a& t# t
4 @4 J6 b$ j9 |; g7 y: k7 M4 C; |5 r
解决方法:
: r- A# }( ^+ |$ J* }, K A2 Q& p3 |$ w! C5 L" n: f
这里解决方法很简单,先将原图像,那一块区域赋值成白色,再通过阈值分割就可以将其区分开。6 i3 q% q0 p' q& I, V. M4 m6 B$ e
9 C. p; u9 P% L* U$ N( `3 z代码实现:
/ Z% }7 |$ L' G. {& m) r5 ~
6 {4 X* l4 C. O' M0 f- copy_image = I;
- r = 50:100;%要赋值的行坐标
- c = 20:300;%要赋值的列坐标
- copy_image(r,c,1:3) = 255;
- figure;
- imshow(copy_image);
- - T# @% ~, k! ~/ x2 G6 s
w- c$ x, _$ }2 R& Z
% j( n% M; ]' X& Q1 l运行结果:
k, E- Z/ D; K* I9 @) K; H# Q/ J2 W, ]
7 `! d& R9 ?' Y/ ~( }- x1 k1 i
6 k1 g2 Q0 Q. a4 t* Y. O! V" s在将其进行图像分割,即可将原来的矩形去除:
) `- y6 E* N- a; m+ ~ f* y; ?( k6 r% A* ` ~
参考文档:' i6 n. S" p5 S. R; T& Z
% s9 b( T3 c0 tRGB图像中特定颜色的提取; x7 s6 `4 x2 V3 \: V; ?7 z' ~
) c- J( S3 B" N/ S
|
|