|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
) n( C2 X$ W# n' r3 M9 q8 `; ?
需求: S. D5 a8 j7 L0 e( J
* f3 ]$ ^, @+ O" `1 t$ G
直接操作RGB图像的像素点,进行颜色的相关操作。
e t$ g \2 f2 O, Z, H! `; \& s! U
掌握这个,必须对MATLAB中矩阵的操作有所熟悉,特别是整行、整列的操作。, B3 Z6 e4 \' `& _
2 ~/ n( S6 f9 ? 如:2 z. J) n& Q0 c5 V: S6 L+ i
* `! K& @ F, q. j/ H l
J = [1 2 3; 4 5 6; 7 8 9]; ——这里定义了一个三行三列的矩阵。% W( T- x" w E$ f
0 Y4 q6 g4 f S) Q J[:, 1] = 0; ——直接操作了J矩阵中每一行的第1列 此时J = [0 2 3; 0 5 6; 0 8 9]
7 M* _ V w! V5 N d+ |. ^% n3 w& [& l
其他如行操作用法类似,不再赘述。% |/ f7 A! ]8 g+ @
3 E+ Q4 p9 N' r( f( L% ]
. S- U3 V% B* g8 X. ?; ]% ~$ Z- H# n+ R* {
下面我们对一副图像进行直接操作,把其中的红色部分改为蓝色。/ I, V. p: k4 W2 c: Z
3 M2 E1 {( {3 j- \
代码如下:* Q8 r O- t9 q
* o. l# c# V; g$ d# M
- % BY SCOTT % red2blue
- % change red to blue
- clear all;
- clc;
- rgb = imread('red2blue.png');
- figure;
- imshow(rgb);
- R=rgb(:,:,1); %red
- G=rgb(:,:,2); %green
- B=rgb(:,:,3); %blue
- [x,y,z]=size(rgb);
- for i=1:x
- for j=1:y
- if( (R(i,j) >= 180) && (R(i,j) <=255) && (G(i,j) <50) && (B(i,j) <50) )
- R(i,j) = 0;
- G(i,j) = 162;
- B(i,j) = 232;
- end
- end
- end
- % in this way
- % blue(:,:,1)=R(:,:);
- % blue(:,:,2)=G(:,:);
- % blue(:,:,3)=B(:,:);
- % another way
- for i=1:x
- for j=1:y
- blue(i,j,1) = R(i,j);
- blue(i,j,2) = G(i,j);
- blue(i,j,3) = B(i,j);
- end
- end
- figure;
- imshow(blue);
6 `# _1 i$ l$ l4 l7 e. V7 V/ [ ! }' d- k7 ^, @3 ~
7 D( }) }0 p4 l3 F: u5 d9 z' M* Q+ T) |/ M
运行结果:' G: z# L Z9 M
转换前:( R! _2 `5 i/ l4 Q4 b( n
( A1 v( D0 @' Q. d4 g+ T! L
5 a/ e2 T! g! L3 M
* Q4 w- l4 x H4 x, G% U
转换后:
, _( e# B" J9 s$ }; \' z- C+ K9 R9 C% ^% N% R
! ?1 R: R" k$ n5 ?( j% }% t8 |
* h0 Q" R/ r# @& K" P |
|