找回密码
 注册
关于网站域名变更的通知
查看: 594|回复: 1
打印 上一主题 下一主题

大神整理的一些MATLAB图像处理笔记

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-13 11:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
, r2 K" \6 `, n+ S- E5 b4 e# F
由于工作需要,开始研究一下MATLAB图像处理相关的知识,图像处理只是matlab应用领域中小小的一部分而已。以前只是听说过MATLAB很强大,但没有系统的学过,如今开始学时,发现matlab确实很不错、很高大上。操作起来很方便,特别是编写程序时,比C语言更简洁。# {6 y1 q0 {9 L3 v9 G

. i$ S+ ^3 t" H+ C8 \很多人都是大学里就学过matlab的,由于是半路出家,所以知识不是很全面,直接拿了一本冈萨雷斯的MATLAB版的书就开始看,下面做一些简单的小记录。
5 s, L! H1 l- q; O4 ?7 R$ o
8 q- S% x: e( R1. matlab命令基础:
9 s" `! b! V  ~- G/ s基础命令:8 H, }7 e. v+ D/ ?" h4 ]( ^( c( ]
; h& h4 ?5 f: r' a
clc——清除窗口
# _9 v* w" n7 Q, Bclear——清除之前赋值过的变量! G0 O9 m3 X% ]" S. n. m
disp——打印信息,相当于echo
" W* Y1 X) K& T% i0 jcelldisp——打印元胞数组内容7 S1 ?. h) r* V8 V; i( E. F
who——简单的显示当前已有变量. \2 `* y& ]6 G9 P7 d7 c
whos——显示所有变量及详细内容 whos也可以指定显示某个变量& W" ~1 g# M1 {
tan/sin/cos/log ——各种数学运算
/ _4 P4 k3 Q2 @5 B  }' \...——用来续行
9 `) m) Q: p9 m, F定义数组——x=1:1004 m7 v4 R0 [. ~: t/ N  L6 h
定义矩阵——A=[1,1,2] A=[1 2 2]; 加分号表示不显示命令执行结果 定义空矩阵B=[]- p% [' D4 l( Y8 Y9 H
矩阵转置——A=[1 3 5 7]  B=A' 或 B=A.'可以把行向量转换为列向量
) b  Z$ w* i, @  N5 Z0 G' V2 G取元素——A(1)取A中第一个元素  A(1:5)取A中第一到五的元素 7 `0 U  Y/ S1 E$ A! Z
                  A(1:end)取第1到最后的元素,产生一个行向量; A(:)产生一个列向量
# o5 C) @9 }( j& X( [5 k% ]' t                 A(1:2:end)表示步长为2 步长也可以为负值 如A(end:-2:1)
9 J2 L6 {& A5 q/ [, b- Hlinspace——x=linspace(a,b,n)产生含有n个元素的行向量x n个元素线性隔开 并包含a和b
3 t8 j$ @/ _; ~' S. z:的活用——A=[1 2 3; 4 5 6; 7 8 9] A(:,3)取整个第三列  A(1:2, 1:3) 取两行三列
$ V) Y- n: P, i1 J3 t+
+ f" D) s& t6 J8 Y-
, n8 {2 A+ g4 I, C*——* 表示矩阵与矩阵相乘,满足线性代数上学的矩阵与矩阵的乘法,
1 h' o% L5 _) v3 L( o) [$ f   .*表示矩阵中元素与元素相乘,这两个矩阵的维数必需相同。/和./也一样的道理( h7 g% l5 I) Q0 o/ ~% u

: Y' i7 I; F; _$ Z
% U# `$ y9 c2 a" m  ^+ n7 Blength/size/numel的用法:
$ g6 R, q, ~8 t& [/ ]
% d1 d7 p  v6 d6 I4 {0 o/ flength(x) ——返回x的长度 如果x是单个变量 返回1 如果x是矩阵 返回该矩阵行数与列数中的较大者。2 `! B. f# W6 s8 M
, o7 y0 J* g+ ~, L; }9 |: k
size(x)      ——当x是单个变量时,返回[1 1] 当x是矩阵是 返回矩阵的行数与列数 可以这样来接受[m n]=size(x)* w( q6 V6 N8 y5 U
( O' X5 v0 W# }. V
numel(x)  ——当x是单个变量时 返回1, 当x是矩阵时,返回矩阵元素总个数。
) P( S' D% `  l) M5 S+ j7 \* W* \! H: N3 U
/0 [- U) X( K$ j' H) I

, \/ ?3 K# o4 jformat compact——以紧凑方式显示
& J+ N& {* t  J. I5 g3 V! kformat loose  ——以松散方式显示
; W1 k! m( ]* S1 j+ P2 q' f2 z  `6 p* Y% a: k  V+ v. @
mean函数:
4 r, P6 X3 W; j' x. y  y0 \4 b. U* U& Q9 z
    >>如果有这样一个矩阵:A = [1 2 3; 3 3 6; 4 6 8; 4 7 7];
* O1 m! H  {4 _, l' V- n         用mean(A)(默认dim=1)就会求每一列的均值
9 I9 z7 {# y) `! Q- H0 N/ w: V' Z+ R         ans =  ^) a, l6 z1 Y$ K& Q7 z4 E
             3.0000    4.5000    6.0000( n# D# M# c" I) n# ~' c

! N: `3 l8 _+ S4 _; f    >>用mean(A,2)就会求每一行的均值 + R# v, j" C) o
    ans =
2 I( J% N: v( b- e8 S8 d+ _        2.00008 `0 V* J3 C- E) Q8 k3 v
        4.0000
4 ^* m- T; ^( w- \3 z6 \% A* @9 ]% W        6.0000' Y" O; j3 V* i* l% r- i( A. `: V; i
        6.00001 e3 }2 |% I7 f" \! l
& s# Z% b/ e5 W  Z% m! L; ]
   >> mean(A(:)) 求总的平均值5 M' m5 b% D0 M5 r; j; |& m
  R: M7 }; r6 U) o5 f; z

7 o- y% I# q" A8 Y% H其他函数:
8 c9 g" k' x4 j& i
# e1 S; D4 ]/ Szeros(M,N)——生成一个M*N的double型矩阵 元素均为0
/ i. n$ z8 c8 g4 i# ?ones(M,N)——生成一个M*N的double型矩阵 元素均为1& _2 S; ^) p  R; Q; B
true(M,N)——生成一个M*N型的logical矩阵,元素均为1$ Q; x9 s2 ^( g
false(M,N)——与上面的true相反
0 U1 `% `' W9 w  i, v  K2 ?magic(M,N)——生成一个魔术幻阵/ v% n# }( J) m: B: K& x
rand(M,N)——生成一个M*N的矩阵 元素大小在[0-1中均匀分布]
' f, _: o" h. ~3 W9 [randn(M,N)——生成一个M*N的矩阵 矩阵元素正态分布 随机数均值是0 方差是1.+ ?* g; {- {' Y, L
plot(X,Y)——画二维图像
! J/ r/ r2 Q" `8 Z9 G/ P$ nsubplot(m,n,p)——m代表生成图像的行数,n是列数,p代表子图编号% C6 c6 N0 e' r9 R* H
plot3(X,Y,Z)——画三维图+ n' j( \% c, \
mesh(X,Y,Z)——画三维图9 C0 _& j: z: s& o
suRF(X,Y,Z)——画三维图,并上色
% H  P+ j  u$ c2 v' U) J4 U
: P4 n6 M9 i* t' M/ kmatlab函数设计:2 h) g1 A) I' L% T

* M& [& M9 E; G8 \& A" n.m文件建立的函数文件
# L; d# N+ d+ v$ r* w2 Y/ Ofunction [A, B] = fun(A, B) //输入A、B两个变量,返回A、B两个变量 一般.m文件名命名为函数名字3 E$ B+ I  X- R' l1 s, D
% xxxxxx 代表注释,在命令窗口中输入help fun可以显示这个注释0 Q' ]& r: j" f' A

5 M- D4 s0 B6 H7 A* J
4 J+ w) `$ K) I9 o实例:
9 E1 z3 u: I& F
  • function [g,k,l] = two(x)
  • error(nargchk(1,1,nargin))
  • % error(nargchk(1,2,nargin))
  • if x<=1
  •     g = x;
  • end
  • g = 0;
  • k = nargin;
  • l = nargout;
  • for i=1:1:x
  •     g = g + i;
  • end8 g; f* S$ F, k& {

# \) H& h: G4 k9 I- \( D调用时写tow(10),就可以计算1~10的和。' C" z6 W; K- h4 w& G

4 i, \2 k. z7 p+ W& D" w  X
3 w% k# D) j% c匿名函数:
1 E  R/ w) E0 p% E/ ?* B- _1 M, _5 M# E$ S8 I- w- d# V
var = @(x)(x+1)
) v" K; i/ ~6 g5 b+ i7 F1 b* [调用时形如var(1)即可,@后面跟参数列表
9 P  p( e4 U/ d1 K" S8 |5 l
0 ~9 _5 I# o" p! p0 I3 K接受用户输入信息:. z4 c0 Y8 ?) v0 ~
t = input('Enter you data:', 's');% M- D) P; w9 H! K
t='12.6, x2y, z';
2 m2 j9 o6 P0 e3 y; F[a,b,c] = strread(t, '%f%q%q', 'delimiter', ',') //按指定的格式读入a b c
) A# r8 y" X8 [: Q$ E; z- A6 y! h: D1 \3 n8 L8 {4 Q6 D) s
matlab中,图像大致分为二值图像(0/1)、灰度图像(0-255灰度级)、RGB图像(R、G、B三个分量 三个分量都相同时,所表示的颜色就退化为灰度)、索引图像。. d) p1 i  ]# D) ~! e
      灰度、亮度、强度通常是同一个概念。3 X' N8 ^; j- C7 {( m
      所有图像按照特性分为位图和矢量图,位图常见格式:JPG GIF BMP矢量图:PNG
- }  u/ ~$ q- I. |) E9 ^0 h" m6 e      机器视觉又称计算机视觉,试图开发出一种模拟人眼的能力,能够理解自然景物与环境的系统,比较高级哦。. U+ q" I1 R/ P1 \9 A& c

" p8 s1 ?2 f6 N/ y$ g$ o' G" knargin将返回输入到函数的参数个数、nargout用于函数的输出$ U' t4 _7 S, v4 |
nargchk用于检查参数数目是否正确margchk(low, high, number),使用实例:
& y" X2 f2 ]! w( r* h. [, rfunction G = test(X, Y)
2 q) g3 F& G0 K( B/ N  Q6 qerror(nargchk(1,2,nargin));% ~. Q2 g7 B7 d) x

+ r  q2 l4 [9 P# R* J
& W8 F& L8 @- K7 Z  Z2. 图像处理基础:! K0 s3 Y  {& w. A0 p: A2 o' h
imread——读入图像A=imread('1.jpg')
! {  n" }  y) |imshow——显示图像imshow(A, B);  imshow(A, [low high]);" E. I4 b+ A+ O0 p" s& q( e
                    会将所有小于或等于low的值显示为黑色,大于或等于high的值显示为白色1 U* i2 B! A3 y9 e' Z+ y  M
                    若B省略,默认的灰度级是256,imshow(A, [])  []表示将low设为A的最小值 将high设为A的最大值% \8 g9 R5 }! y; A9 d
                    显示多幅图像:imshow(A), figure,imshow(B)9 }: q2 P' r: Q! L8 v
imwrite——保存图像 imwrite(A, '2.jpg')
4 u! B% J! I$ {# b  w+ h+ Q1 v2 h                     imwrite(A, '2.jpg', 'quality', q) // q在0-100之间(由于JPFG压缩 q越小图像退化越严重), p# C" F! E6 u3 T# B
size(A)——显示图像的大小
) z" `* i; Z2 K8 Mimfinfo——显示图像的详细信息 imfinfo 1.jpg 也可以K=imfinfo('1.jpg') 就可以使用K.Height K.Width等等信息0 N; p2 ~, J& e6 u
                    学会计算图像的压缩比:imgBytes=(K.Height*K.Width*K.BitDepth/8) compress_bytes=K.FileSize
) F: y: w+ ^% |/ ]9 c0 d$ V8 k                    imgBytes / compress_bytes ==压缩比8 m, X; ?$ f, C3 s
  ]. g* {- o2 J! g9 j
                    命令窗口输入:imfinfo test.jpg,显示信息如下:                    
( Q% }* K* @- r: Q! i! N. L& p5 u4 p8 a
  • ans =
  •            Filename: 'C:\Documents and Settings\Administrator\My Documents\MATLAB\test.jpg'
  •         FileModDate: '30-Sep-2014 10:31:18'
  •            FileSize: 1609315
  •              Format: 'jpg'
  •       FormatVersion: ''
  •               Width: 2336
  •              Height: 1752
  •            BitDepth: 24
  •           ColorType: 'truecolor'
  •     FormatSignature: ''
  •     NumberOfSamples: 3
  •        CodingMethod: 'Huffman'
  •       CodingProcess: 'Sequential'
  •             Comment: {}; K, Q" J+ q( ?. F6 z, Y
! t/ [+ O7 L9 S( G
5 @( g: m9 |0 g+ `% c
double/im2double/mat2gray的区别:( R6 Z, M" f+ I! L9 }( t  s
* l% ~& K6 C' G; ?
        A=imread('1.jpg');) k7 t: n- M4 k
4 ^; }1 [2 y5 ?7 O  ^$ o; ?
        A(1,1,:)          ——显示A中第1行第一列像素点(包含红、绿、蓝)三个分量的值% ^" D! }5 K" j7 u# E
   ; g; m. s/ X5 w7 J1 [: h: l$ D
        B=double(A)——转换为double类型 值不会变 注意 使用im2double值会[0-1]* [4 w: b; C7 Z& Q' d
        im2double   ——若输入是uint8类型 每个值会除以255.
) r/ j$ j) `, E( y; i        mat2gray()   ——可以将double类型转换为归一化的double类型# g3 _2 f8 s" d7 j' T4 s
        区别:
: ?- r7 l$ j' m3 g4 C9 O        im2double:如果输入类型是uint8、unit16 、logical,则按照0-->>0,255-->>1,将其值按比例处理成0~1之间的double数值;如果输入类型是double,输出没有处理;
# U" e; j( x* Y  ?4 W' c# R! B% I* n4 o2 @; t& o7 Y+ }" f4 G
        double:返回数值与输入相同的double类型矩阵;
# M$ q5 Y" o! H+ u2 m5 H$ ^. M  k% U+ Z' Y% k
        mat2gray:对输入进行归一化处理,最小值-->>0;最大值-->>1,输出类型为double。
! X) r2 L& T1 W! b3 o% H" q( @  z        在实际的对图像处理过程中,由于我们读入图像是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此通常使用im2double函数将图像数据转换成双精度型数据。5 m; n5 j% S8 D

0 p: b. X0 {, W3 @! }8 K" b注意:uint8类、uint16类RGB图像取值范围分别是[0, 255]、[0, 65535],而double类范围是[0, 1]2 Y, t; r5 s* d* L4 }- N
  ^3 ~4 ~7 \7 D# I, X  E$ ]8 E( l6 `
C=[-1,0.5; 2,3] . ~) s3 w& p. A. D
B=im2uint8(C)——im2uint8把所有大于1的值转换为255 小于0 的值转为0 其他值乘以2553 O8 o7 M  P# \4 f4 {9 B
im2bw          ——得到二值图像 可以先A=mat2gray(B), im2bw(A, 0.5)
) X$ R5 O( P" k1 I2 t2 v! u
, E* J1 T: ~/ l5 {
! }! G7 s1 H: F7 @% m; v+ WIPT支持的图像的算术函数:
+ Q: |% G9 |$ G5 p& }. J+ A* fimadd——图像相加
8 d1 c" _. `) a% g( w9 \imsubtract——图像相减3 v9 c0 x! Y" T9 j$ o' a1 G
immultiply——图像相乘" N, ]8 V; E$ H" V0 [6 W
imdivide          ——图像相除
9 [' {  M1 @$ p8 c2 Z7 Vimabsdiff——计算两幅图像之间的绝对差6 M' b: {4 ]7 U
imcomplement——对图像求补
! }5 N; `. S$ Z- n$ h9 ~9 Oimlincomb——计算两幅或多幅图像的线性组合0 l* J1 ~! Q* m! z

! e. o2 j9 m1 @9 D) i图像旋转函数:
( I# d. I4 b! r9 S9 R3 e2 C0 S- K$ z1 b7 P- d8 v1 Z* _$ F" F
imrotate,matlab默认是逆时针旋转, imrotate参数解释:
( Q' \+ }3 W' c$ Y
" G) f# L1 [) J        angle顾名思义 就是你旋转的角度, method 就是你实现旋转用的是什么方法,有三种  和后面的插值放大缩小是一下就是 最邻近插值法 双线性插值法 三次卷积插值法,英语表示就是  'nearest'    'bilinear'    'bicubic'。* D# T" P% {5 t8 k$ P
        不同的插值方法得到的旋转图像有细微的差别 如果你不选在 matlab默认的是最邻近插值法 那么图像会有一定的失真,这个失真主要是因为matlab在计算每个点的新坐标的时候得到的数值不是整数,要去整所造成的最后说说bbox   这个的意义主要分为2种,也就是说我们在这一项有2个选择 一个是‘loose’ 另外一个是‘crop’" M+ j$ W0 @* L, p
        loose  就是宽松的意思 顾名思义就是说 图像旋转后 系统会给予一个宽松的环境去匹配它,这样你得到的图片就是一个完整的图片
/ b. P8 G3 [1 h. m' G: V- W$ y# n" D' f1 P3 q# d
        matlab的解释是 When BBOX is 'loose', B
% ~2 l  U( s( Z1 E4 C7 q& c" p( w
        includes the whole rotated image, which generally is larger than A.# j9 a3 g- q8 b8 q  ~4 a: I9 C& s0 f, w
        crop 就是剪切啦,也就是困扰了大家很久的问题,为什么旋转后图像变小了,因为matlab默认的是crop  超过图片原来大小的部分被crop了% j" D: ?1 ~3 a- I9 N

6 r0 R; ]  W# x
  • >> subplot(2,2,1)
  • >> imshow(A)
  • >> subplot(2,2,2)
  • >> imshow(imrotate(A, 30, 'bilinear', 'loose'));
  • >> subplot(2,2,3)
  • >> imshow(imrotate(A, 30, 'bilinear', 'crop'));
    % m  o' m, `0 N! U' r. j
$ j7 S0 d! V2 e  s+ Y

1 k: ?1 `0 [1 D3. 亮度变换与空间滤波:$ F8 H' A6 Y7 t: a7 w
1. 亮度, }/ s6 z+ `, {
    imadjust函数# b6 o0 ~  Q" Y# O+ N: ~, }5 m
    A=imread('1.jpg');, e: J3 m. w& @7 s% E7 A3 \
    B= imadjust(A, [], [], 0.75); // gamma<1 变亮
2 ~+ g$ t+ s1 w+ p    imshow(B)8 {  K2 Z% J+ B% |7 M! |

' |9 G$ g& y6 N    C=imadjust(A, [0 1], [1 0]);
3 y/ D4 [. M1 P! v! t% O/ `    效果等价于C=imcomplement(A) 都是求图像的负片
  {' L" s* \5 K. K( N3 w2 v2. 对比度拉伸函数" V: r! J# X! D0 u. S& I% M
     g = 1./(1+(m./(f+eps)).^E) // 加eps是为了防止溢出
1 Z8 M! j" B0 l0 |/ e3. 直方图
, D" X* J+ m" C  i7 I3 q5 F% y    imhist函数:$ a8 j& T& P# i) v" _; L% j
    h = imhist(f, b) //b是灰度级个数 默认是256
; N' N! [- `* a1 k2 r$ Q" i7 o6 d    numel(f) //得到像素点个数
& Q5 O8 _, z- F2 B- H) z    B=rgb2gray(A); subplot(121), imshow(B); subplot(122), imhist(B);
3 a2 W* O3 b6 E2 F$ s    直方图均衡化:& B1 C" j6 I, c8 h8 s: N
    histeq函数:
: S. B# C% ?; e  ?) F( s    J=histeq(I)$ ^$ r, x$ \4 v: j  W5 A) H  h0 E
. k! C9 I5 Q  g+ R; T! F
3 F  ^, B1 X4 k4 F
实例:
3 M3 V, ^) q+ `0 d) t' @
  • >> A=imread('test.jpg');
  • >> B=rgb2gray(A);
  • >> imhist(B);//显示直方图
  • >> figure;
  • >> imhist(histeq(B)) //显示均衡化后的直方图
  • >> C=histeq(B);
  • >> imwrite(C, 'xxx.jpg');
    . b1 S! o, f* g* a5 m% [6 U

7 `# C, H% u2 S; A$ m& j. p
1 C" C& m$ C: P% }0 Y) \图像如下所示:5 K' G! n! ^0 ~* r9 I% g; G

- S) G) W1 ~6 t& b5 b; V$ |, s, g 0 g+ D' _4 @( R2 g0 [, @2 Y
8 b2 C! r% |1 ^7 d1 b! @3 ?
0 t5 N) Y2 _  U+ n6 _6 z2 h3 p& `

' {! D4 }  \5 [1 [4 }6 x- m: y
* O- C  f6 J% V4. 空间滤波:
/ h% F7 L! R) b  Z- p; [) ^0 X5 F4 t( `
    线性空间滤波:imfilter函数
* E& d$ J7 t  n. s    g=imfilter(f,w,filtering_mode, boundary_options, size_options); ' d6 y- G2 |0 B% N* ]) B6 j* t
    //filtering_mode=corr/conv size_options=same/full  E/ D: o6 e: Z* J  U6 Y* U( A
    通用语法为 g = imfilter(f, w, 'replicate');
7 _7 G: {$ s" l6 q5 L" ]( O0 m    非线性滤波:colfilt函数1 F! S5 L0 w+ r& m7 y

6 r* }- D: u4 j! ]# j    IPT中的线性滤波器:
9 P; F. y# ?* R+ `2 N      fspecial函数用来生成滤波掩膜w
3 H. ^: y9 `) i3 ~4 \  C# \      w = fspecial('type', pARM) //type表示滤波器类型5 c7 y/ b$ _1 g& }" q
      type值可以是:average disk gaussian laplacian log motion prewitt sobel unsharp
+ G8 `2 E3 E: K# C# _, k* o
* C+ ]5 ?" a+ i/ N& v+ e实例:, p8 w* F* ^: W; r" x
使用拉普拉斯算子来增强图像,包括锐化,同时应该保留其灰度色调) K, V# A0 g9 Y8 q# u; @

5 s3 r* q; d8 T+ c1 \' {, o0 l( N: Jtest_shape.m6 W) v; z$ j7 {* z, E: C; K8 ]
  • function [] = test_sharp(A)
  • % Test Sharp
  • B= im2double(A);
  • w= fspecial('laplacian', 0);//laplacian时 第二个参数默认是0.5
  • C= imfilter(B, w, 'replicate');
  • D= B-C;
  • imwrite(D, 'out.jpg');
  • 最后对比A与C的效果  发现图像明显更为清晰了。。。
  • 可以直接用unsharp选项,效果与上面的差不多
  • A=imread('test.jpg');
  • w = fspecial('unsharp')
  • B=im2double(A);
  • C=imfilter(B, w, 'replicate');
  • imwrite(C, 'out.jpg');
    , R% e, h- x+ g3 R) E1 h

( Z, D& h! |5 o- Y5 N: }4 j上面使用拉普拉斯算子产生的w=[0 1 0; 1 -4 1; 0 1 0]; 中心为-4,现在我们手工指定中心为-8的情况如下:: [6 F7 R- ^2 {+ T$ r; m0 w
  • function [] = test_sharp(A)
  • w4 = fspecial('laplacian', 0);
  • w8 = [1 1 1; 1 -8 1; 1 1 1];
  • A = im2double(A);
  • A4 = A - imfilter(A, w4, 'replicate');
  • A8 = A - imfilter(A, w8, 'replicate');
  • imwrite(A4, '4.jpg');
  • imwrite(A8, '8.jpg');9 P- H- {* {  k  \0 T6 X7 R

, L1 y" ~3 M& F& V$ Y9 Q2 w! {5 n2 {4 T0 H4 {* K
会发现图像锐化效果更好,图像更清晰。
( @9 o  l$ m( q" @& @! ]; f) L! t, F; D( A8 t$ f% f
    IPT中的非线性滤波器:
" N5 w+ t5 W! x+ u* U; N0 z! v    ordfilt2函数  g = ordfilt2(f, order, domain): s5 t& L" {1 u( y2 O% }
    中值滤波medfilt24 k/ q) _/ @# w6 x8 K3 D2 f
    图像中加入噪声:格式:J = imnoise(I, type, parm)% l( ]% T& K# S1 z4 Y

+ G3 H, q( F% n/ B; y2 ^    >> A=imread('test.jpg');7 ^# O! k- D9 H
    >> B = imnoise(A, 'salt & pepper', 0.02);+ L2 ^) _! ~: g+ Z" O/ p, \
    >> C=rgb2gray(B);
4 E3 X0 f- x* j+ Z- H* G) Q. C    >> D=medfilt2(C, [3 3]);//中值滤波6 m. {# j1 I8 o
    >> imwrite(D, 'xxx.jpg')
3 l" Y6 V! r: x/ f( G4 d3 U9 d! T) S' h; _& g$ Y. c" N0 b8 ~
! H8 }& e& ~8 Y3 [  n
4. 彩色图像处理
# ]8 Q! B3 z; k! C8 E8 x1 \& K>> A = imread("test.jpg");9 x$ K6 w1 S; b1 G- i' |
%获取图像R、G、B每个分量
' N4 J8 `0 c$ {2 g9 T>> R = A(:,:,1);# U8 W+ x( P; G! J
>> G = A(:,:,2);
* s+ ^. P+ p" Y' i>> B = A(:,:,3);
2 D6 A* I- d2 p) x4 t5 F9 T>> D = cat(3, R, G, B); //cat组合成图像
, A' Z6 T: |: [/ P  {5 [+ n7 a9 ?2 t4 j+ _, C) D
  • clear
  • rgb=imread('xxx.jpg');
  • rgb_r=rgb(:,:,1);
  • rgb_g=rgb(:,:,2);
  • rgb_b=rgb(:,:,3);
  • [x y z]=size(rgb);
  • zero=zeros(x, y);
  • R=cat(3,rgb_r,zero,zero);
  • G=cat(3,zero,rgb_g,zero);
  • B=cat(3,zero,zero,rgb_b);
  • RGB=cat(3,rgb_r,rgb_g,rgb_b);
  • subplot(2,2,1),imshow(R),title('红色分量');
  • subplot(2,2,2),imshow(G),title('绿色分量');
  • subplot(2,2,3),imshow(B),title('蓝色分量');
  • subplot(2,2,4),imshow(RGB);
    - t( z% Z4 [- {( y* l% m

) N  s* A7 c5 h' ~6 Z/ ~
2 L# U5 S& z7 H9 N& i4 f- Q% \  F8 r2 B2 \4 M
' Y6 `9 j2 ?2 z! @

该用户从未签到

2#
发表于 2019-12-13 19:26 | 只看该作者
给大神点个赞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-5 03:09 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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