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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
3 x' @3 z% r( G. U; A7 E2 x
由于工作需要,开始研究一下MATLAB图像处理相关的知识,图像处理只是matlab应用领域中小小的一部分而已。以前只是听说过MATLAB很强大,但没有系统的学过,如今开始学时,发现matlab确实很不错、很高大上。操作起来很方便,特别是编写程序时,比C语言更简洁。
( U6 h  Q3 O) U! P' ^
8 e5 u2 e' U1 C( u0 V很多人都是大学里就学过matlab的,由于是半路出家,所以知识不是很全面,直接拿了一本冈萨雷斯的MATLAB版的书就开始看,下面做一些简单的小记录。
" S7 M: K7 I" e' U: x2 E9 X# B" v7 s( f, l# N1 W- c; H
1. matlab命令基础:: d8 c8 S5 r( q/ x
基础命令:
' i. K7 t& ~4 |% o7 s/ X
1 \# o9 \9 z$ q$ j* E8 P  Aclc——清除窗口
5 ]5 e3 a1 m$ b! Pclear——清除之前赋值过的变量
6 L# w, p; B" L8 G- A* fdisp——打印信息,相当于echo9 X* s+ G7 K+ c+ O& P
celldisp——打印元胞数组内容' r7 F1 X  t! [. X$ ~: Z
who——简单的显示当前已有变量
1 K/ a& t! {2 b! hwhos——显示所有变量及详细内容 whos也可以指定显示某个变量) [, m( |, A0 w% R4 h: B
tan/sin/cos/log ——各种数学运算
5 y; i- A0 n5 b$ v...——用来续行: R  z/ ~, ^3 ^( @4 Y5 i
定义数组——x=1:100
5 {5 j# L. T) h( c定义矩阵——A=[1,1,2] A=[1 2 2]; 加分号表示不显示命令执行结果 定义空矩阵B=[]
: u4 @2 Z6 ?# @& T矩阵转置——A=[1 3 5 7]  B=A' 或 B=A.'可以把行向量转换为列向量- E* H! \5 Q: u1 c* Z; p
取元素——A(1)取A中第一个元素  A(1:5)取A中第一到五的元素 ' z' J3 t; ~& r2 O- U1 ?: T$ a
                  A(1:end)取第1到最后的元素,产生一个行向量; A(:)产生一个列向量
  R5 u  k' @# e; K# d                 A(1:2:end)表示步长为2 步长也可以为负值 如A(end:-2:1): j  ~8 u# H% Y+ u) O2 Z2 R
linspace——x=linspace(a,b,n)产生含有n个元素的行向量x n个元素线性隔开 并包含a和b3 T+ `% P; x- j5 t
:的活用——A=[1 2 3; 4 5 6; 7 8 9] A(:,3)取整个第三列  A(1:2, 1:3) 取两行三列) U- Y  E! v+ J7 d( u7 v
+1 ?2 j& p& M9 U. P+ g0 @8 I7 f
-
( Z, I/ E  \* o+ x" q( F2 m6 ]*——* 表示矩阵与矩阵相乘,满足线性代数上学的矩阵与矩阵的乘法,  u8 M: e6 z5 g+ A) R4 I( b; H+ ~
   .*表示矩阵中元素与元素相乘,这两个矩阵的维数必需相同。/和./也一样的道理  j% f9 F- R  f# K+ O
7 d+ u. c7 u% z2 t
! ?* V% L$ R/ o' H" n, J* u7 U
length/size/numel的用法:
0 e& k% `5 O; O# t, e
0 @' G4 _* B8 w9 [  v+ w4 F. ]length(x) ——返回x的长度 如果x是单个变量 返回1 如果x是矩阵 返回该矩阵行数与列数中的较大者。0 e3 a% V! o7 f

+ d: s) h( w2 fsize(x)      ——当x是单个变量时,返回[1 1] 当x是矩阵是 返回矩阵的行数与列数 可以这样来接受[m n]=size(x)
' A; k/ ?) q' P1 D' e- m- c
1 [9 l0 Q. r" i% ?% A* anumel(x)  ——当x是单个变量时 返回1, 当x是矩阵时,返回矩阵元素总个数。
# K, m/ n7 i& y2 ]6 [  G, u: F" b0 ~
% N$ k: p/ x% E, {) t* |/; I' Q- |/ j+ w6 C( m
8 T% k9 R5 v- w. }, ~0 Z* Z$ P
format compact——以紧凑方式显示
- _7 B. U  B( ^9 U0 F4 L  Z1 Hformat loose  ——以松散方式显示
1 N$ o0 \9 Z( J3 j1 G
1 y: T7 O( _" I* Dmean函数:
6 g0 s  b$ w& ~. e8 c5 u* s3 i
8 a, {- y/ N; s- ]# l    >>如果有这样一个矩阵:A = [1 2 3; 3 3 6; 4 6 8; 4 7 7];* S' t) T* p$ }
         用mean(A)(默认dim=1)就会求每一列的均值
' t1 b6 L4 k+ r6 d  F         ans =6 v" h. r4 `2 w
             3.0000    4.5000    6.0000
, w0 Q9 z% }0 [4 r- c  O
& [, D- l) p" \$ @$ k    >>用mean(A,2)就会求每一行的均值
( N4 h  `- \# O; X    ans =
) z( X5 d, ]( e8 N        2.0000# b4 f' M( k9 _9 q4 y
        4.0000
2 H) `7 w4 D6 X8 W# R) }        6.0000( [/ O7 W. {( Q0 |, t1 p( _
        6.00005 z( O! I! [0 f4 s4 k3 r% A; i
9 N+ a, f$ p  g3 V2 r( ^# p3 N
   >> mean(A(:)) 求总的平均值8 S- u& Y( z7 V( G

% t2 l5 k# @1 X/ k6 d+ c' B$ {7 T2 c" g* H( M7 k
其他函数:' ]5 R: f$ H' p$ b. T
" J8 {& b- j3 h3 c4 }
zeros(M,N)——生成一个M*N的double型矩阵 元素均为0
9 E6 }& j/ j0 d2 Aones(M,N)——生成一个M*N的double型矩阵 元素均为1. e6 L+ h( ^. |  D
true(M,N)——生成一个M*N型的logical矩阵,元素均为1, h+ ]+ a. m, ~" I! L
false(M,N)——与上面的true相反
/ F1 j, Y* g' D2 x7 ?7 W' Z5 bmagic(M,N)——生成一个魔术幻阵$ l8 w# r( |8 b+ r' W+ a/ Q
rand(M,N)——生成一个M*N的矩阵 元素大小在[0-1中均匀分布]+ ^, \; B' e3 l- {1 ?2 T
randn(M,N)——生成一个M*N的矩阵 矩阵元素正态分布 随机数均值是0 方差是1.
5 f' S: n- Q, H2 M. F# ~& d% }5 wplot(X,Y)——画二维图像+ e; h7 f) W4 s: w+ K  g
subplot(m,n,p)——m代表生成图像的行数,n是列数,p代表子图编号
/ v6 w1 v9 y: L* Lplot3(X,Y,Z)——画三维图
3 g0 F6 I2 K3 i, Z4 {, Amesh(X,Y,Z)——画三维图
  w3 B" X' p$ g" C+ BsuRF(X,Y,Z)——画三维图,并上色
# j% m% O6 B  |8 v! S6 d. e, E
. L0 j! y9 ?8 g" P+ Hmatlab函数设计:
7 R0 q, D3 @* I( f" Q5 S+ B1 c
( Y( a" J5 ?0 W( Q: N5 G6 s.m文件建立的函数文件4 z5 f# Y# i, g4 ~" z# y8 g* Y
function [A, B] = fun(A, B) //输入A、B两个变量,返回A、B两个变量 一般.m文件名命名为函数名字
8 `4 p9 H9 N$ d3 w& w% K; j* z% xxxxxx 代表注释,在命令窗口中输入help fun可以显示这个注释0 R6 ?& @( H, S9 V

! m2 F' n( R! \9 @  J' |6 |# l8 ~2 g. x1 q# W/ u4 Y. v
实例:3 ~% Z* v/ V, H+ T
  • 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;
  • end
    4 x% h1 F! d( D

& j( A! D& v( i7 K9 c调用时写tow(10),就可以计算1~10的和。
% @( f' y( w- P9 c5 I7 Y) ]6 E4 j$ M; @
2 K! l3 C0 _1 v
匿名函数:
/ [. m+ z) z2 v) |4 M6 _; z, p" Y0 `/ G4 {
var = @(x)(x+1)
! s3 ]5 I" H( X9 q调用时形如var(1)即可,@后面跟参数列表/ X' v2 g, J+ d

+ g2 t& |; T; S! l" o接受用户输入信息:
, S% d; i# G# Ct = input('Enter you data:', 's');
3 n6 B# i# X  j6 Q% Y& M) q+ j- @! _t='12.6, x2y, z';& H/ C( a' Q- V# a, {
[a,b,c] = strread(t, '%f%q%q', 'delimiter', ',') //按指定的格式读入a b c
7 A" k* g6 P( v' m
+ ?5 D3 }# n8 e- R: h3 umatlab中,图像大致分为二值图像(0/1)、灰度图像(0-255灰度级)、RGB图像(R、G、B三个分量 三个分量都相同时,所表示的颜色就退化为灰度)、索引图像。! R' i0 U. X& `+ {
      灰度、亮度、强度通常是同一个概念。& Z( k; @9 }. y
      所有图像按照特性分为位图和矢量图,位图常见格式:JPG GIF BMP矢量图:PNG
8 K8 L$ A8 E* G5 K      机器视觉又称计算机视觉,试图开发出一种模拟人眼的能力,能够理解自然景物与环境的系统,比较高级哦。) S) @, `* H3 w9 T, r* N2 ^! j4 p
5 f! T6 f+ r- i, ]2 c& m) H
nargin将返回输入到函数的参数个数、nargout用于函数的输出
/ r$ B5 D( g7 m( a% F+ Wnargchk用于检查参数数目是否正确margchk(low, high, number),使用实例:
1 y; ~/ H- @+ L4 t( H/ ^function G = test(X, Y)
6 H/ a7 M$ A- U/ P5 X  |7 Qerror(nargchk(1,2,nargin));
1 g  P  J) L( D: ^/ z5 t
" N7 T& L& J4 U9 \7 U8 y0 i
, a6 Y  v- v5 s; `* ^+ ~- m# B2. 图像处理基础:
& D; v2 S) e* x' w  X1 A3 A$ Vimread——读入图像A=imread('1.jpg'). a2 |! ?/ P* M) q
imshow——显示图像imshow(A, B);  imshow(A, [low high]);  k) {; W* Y) e1 {% C8 h/ k: R2 j
                    会将所有小于或等于low的值显示为黑色,大于或等于high的值显示为白色$ P/ a( F8 b: u% C6 C( ^! m
                    若B省略,默认的灰度级是256,imshow(A, [])  []表示将low设为A的最小值 将high设为A的最大值# L1 w* t* |( X: x
                    显示多幅图像:imshow(A), figure,imshow(B)
+ P& _, F- M, M, k% H3 [imwrite——保存图像 imwrite(A, '2.jpg'), |3 T/ @5 N" E8 T& T
                     imwrite(A, '2.jpg', 'quality', q) // q在0-100之间(由于JPFG压缩 q越小图像退化越严重)
0 X. W: u* w& g$ Y0 I0 nsize(A)——显示图像的大小/ I" w! m# g! D7 Y; c  L
imfinfo——显示图像的详细信息 imfinfo 1.jpg 也可以K=imfinfo('1.jpg') 就可以使用K.Height K.Width等等信息$ J4 M: h/ L% Q; a* v4 t$ w
                    学会计算图像的压缩比:imgBytes=(K.Height*K.Width*K.BitDepth/8) compress_bytes=K.FileSize% L/ h: U( T  i, S
                    imgBytes / compress_bytes ==压缩比7 P+ S& E) F6 l( t: K$ Z1 d
. H# h& E# e& R' e/ g) a# `
                    命令窗口输入:imfinfo test.jpg,显示信息如下:                    8 @* P3 j3 B  U/ _: w/ X) {0 w
9 U" f5 j; q# P- P6 w8 T) Q$ D
  • 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: {}. Z& v& a7 S$ \% ^8 V4 O
# e+ G& \2 O. R" h' P' G
. i1 J7 D$ @0 D! p
double/im2double/mat2gray的区别:5 z2 @  q: f0 r0 M6 t8 i  E& Q
+ A$ ?! U* H; C% Y! Z% A( F) v
        A=imread('1.jpg');+ Y% n! U. ]* v, C& q' s
& y. n7 N4 c% R
        A(1,1,:)          ——显示A中第1行第一列像素点(包含红、绿、蓝)三个分量的值# O2 s; v7 p' K) K3 u3 E" S1 S6 I
   
# Z/ q' `& x/ e        B=double(A)——转换为double类型 值不会变 注意 使用im2double值会[0-1]( O, n, ]* G; h% [
        im2double   ——若输入是uint8类型 每个值会除以255. ! d, Z* u' u4 _8 J5 _$ ~* ?! l
        mat2gray()   ——可以将double类型转换为归一化的double类型; v* x3 H3 F7 p
        区别:
0 O/ e( m5 `- e) V        im2double:如果输入类型是uint8、unit16 、logical,则按照0-->>0,255-->>1,将其值按比例处理成0~1之间的double数值;如果输入类型是double,输出没有处理;
3 W+ t! N+ l' ~' ~; ^5 E/ _" k( n# [1 U, a. P6 j. N1 s
        double:返回数值与输入相同的double类型矩阵;' N4 w" F6 _# ~  s( S5 R

9 b6 @; a3 b9 N/ a% l        mat2gray:对输入进行归一化处理,最小值-->>0;最大值-->>1,输出类型为double。
- d; h7 ^+ Z0 E  p. _$ w- q( c3 W: Z        在实际的对图像处理过程中,由于我们读入图像是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此通常使用im2double函数将图像数据转换成双精度型数据。
5 b7 ^7 t/ ?* w5 w, _3 A0 q
( h4 M6 |5 i& G$ [- ]$ Z# G8 ]注意:uint8类、uint16类RGB图像取值范围分别是[0, 255]、[0, 65535],而double类范围是[0, 1]
5 J& j" [3 F, I1 A$ @! a1 z8 G% P* t- l
4 I4 F' b  P2 X, O: ~- ^/ qC=[-1,0.5; 2,3] 8 A0 ^' R% |& j7 Q1 m
B=im2uint8(C)——im2uint8把所有大于1的值转换为255 小于0 的值转为0 其他值乘以255
3 }+ ], I. f( t1 X2 u2 T: aim2bw          ——得到二值图像 可以先A=mat2gray(B), im2bw(A, 0.5), x0 B8 j$ Y4 \+ I8 ^- S" S6 r& C
* K! T9 f& z, n! E) {9 F* L+ x

! z( h1 L: Z+ Z. x8 g1 xIPT支持的图像的算术函数:
: O, E& q$ w1 p5 wimadd——图像相加8 G6 D( ?3 {: O0 u
imsubtract——图像相减
* ]1 W! |8 ?9 N( P& B# eimmultiply——图像相乘
+ Y# `1 _+ \5 Z- a# y; H- B/ N0 Ximdivide          ——图像相除
) {4 y' K0 m6 x9 F- f; l( |, ]imabsdiff——计算两幅图像之间的绝对差
& T* P! M* K' h/ Cimcomplement——对图像求补
2 d" }4 `, J1 z$ Nimlincomb——计算两幅或多幅图像的线性组合9 r2 x- @+ s* `' B
2 s! A$ {. j: H- L; R6 N. Z
图像旋转函数:
  _$ E1 A+ l  \& |: e. m; x2 k5 D( _$ v3 l- E# R+ o% G- V# v
imrotate,matlab默认是逆时针旋转, imrotate参数解释:7 s; t/ }6 n, |# l- V

& V3 U* ?/ `* T0 B        angle顾名思义 就是你旋转的角度, method 就是你实现旋转用的是什么方法,有三种  和后面的插值放大缩小是一下就是 最邻近插值法 双线性插值法 三次卷积插值法,英语表示就是  'nearest'    'bilinear'    'bicubic'。, f0 _" x5 N, _4 q
        不同的插值方法得到的旋转图像有细微的差别 如果你不选在 matlab默认的是最邻近插值法 那么图像会有一定的失真,这个失真主要是因为matlab在计算每个点的新坐标的时候得到的数值不是整数,要去整所造成的最后说说bbox   这个的意义主要分为2种,也就是说我们在这一项有2个选择 一个是‘loose’ 另外一个是‘crop’
5 N; X+ m9 [7 s! K- K) v1 N        loose  就是宽松的意思 顾名思义就是说 图像旋转后 系统会给予一个宽松的环境去匹配它,这样你得到的图片就是一个完整的图片 / l8 L8 u; W* t4 B
" a) q1 O( j7 r9 h: j% i
        matlab的解释是 When BBOX is 'loose', B
0 W3 f1 @2 z; n
. H! X; k+ K/ A- u2 A) l- P1 n7 Q; D        includes the whole rotated image, which generally is larger than A.& A9 W# P3 e4 w3 r( J2 B% i
        crop 就是剪切啦,也就是困扰了大家很久的问题,为什么旋转后图像变小了,因为matlab默认的是crop  超过图片原来大小的部分被crop了
! e$ [( ]( A9 T7 Q  j6 N- Y3 m: _4 s- {- V2 ^+ u! C/ t" 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'));! y4 v4 }4 E' k
- B8 B" u# u8 S7 N2 N- ^, q
7 _( h' L. w; I: G, E0 X- b5 O
3. 亮度变换与空间滤波:
+ r6 I4 p5 \& e( K3 `1. 亮度
# o. x0 h5 |2 H% v" K) w    imadjust函数8 M! O$ n. @$ n; O) o0 Y
    A=imread('1.jpg');7 p+ y# J8 m# ]$ J' H6 ?+ X
    B= imadjust(A, [], [], 0.75); // gamma<1 变亮& r; r) `# k* C6 l: w8 Z
    imshow(B)' _% Y7 W; g% c$ A

8 Q3 M( \$ s6 R* l, r    C=imadjust(A, [0 1], [1 0]);
- N# w8 E: K9 |( d- g, m    效果等价于C=imcomplement(A) 都是求图像的负片 ' {. N8 Y) \/ I+ h" s2 f( v* `$ K8 H
2. 对比度拉伸函数
8 m, Q( E& @5 l3 m+ G0 I3 G     g = 1./(1+(m./(f+eps)).^E) // 加eps是为了防止溢出
9 |: k5 X( P7 \$ s8 p% T3. 直方图
3 `( e$ c9 I8 O+ O: R5 N    imhist函数:5 `7 |6 w" o1 M! ]; T2 {4 i: W) M
    h = imhist(f, b) //b是灰度级个数 默认是256
9 U* C3 O: r6 X- c" f( s    numel(f) //得到像素点个数* k- k" S5 M$ D  A6 r
    B=rgb2gray(A); subplot(121), imshow(B); subplot(122), imhist(B);
2 M5 e8 {. g+ ^/ o  [    直方图均衡化:
$ A2 O$ b- G* s' U) j    histeq函数:
) k* ]- u  M, q, ]+ o, S    J=histeq(I)& w+ K/ x, F7 q: f, X, d

& ~9 n/ Y$ a: H3 q/ A2 c* S' g
" @3 O8 e( }6 k4 e实例:
: c" z+ o0 T) v0 \" q
  • >> A=imread('test.jpg');
  • >> B=rgb2gray(A);
  • >> imhist(B);//显示直方图
  • >> figure;
  • >> imhist(histeq(B)) //显示均衡化后的直方图
  • >> C=histeq(B);
  • >> imwrite(C, 'xxx.jpg');
    - P; _+ Q$ h$ C  E" r
4 U. P3 a; v# d. e! |' ?
2 f4 H( {& [; Y) e
图像如下所示:
4 @) `, I, r! g) B2 O
$ l; s$ g2 o$ ?" p4 ^" e ! V( d! y& n: W; d" U: Y* @/ R# ^

6 S' a6 d7 @# w3 U0 V  L1 R
5 ~$ t; k: U$ ]3 B, ]0 ]7 Z& J
. @9 E+ h5 o* Q5 ^% w# k
1 {4 v0 c- Z( X8 t4. 空间滤波:
3 O  c; t! k! {, Y7 [0 Q( \5 U) n1 ^2 h/ h* @6 e
    线性空间滤波:imfilter函数" X# @  \$ F2 u5 w  V
    g=imfilter(f,w,filtering_mode, boundary_options, size_options);
5 Y2 U3 R' K, f# P    //filtering_mode=corr/conv size_options=same/full8 Z7 k0 P: B' O# P" P9 B
    通用语法为 g = imfilter(f, w, 'replicate');
, b/ K2 S) A/ L" S) n7 u    非线性滤波:colfilt函数8 E' c4 x6 }) w) i7 a4 I
9 _3 a6 |, {' K+ Y# g& t) n
    IPT中的线性滤波器:# x5 J! w! ?9 f; @
      fspecial函数用来生成滤波掩膜w
0 o) X; ~6 M( S0 P# P6 w      w = fspecial('type', pARM) //type表示滤波器类型- k# J' b: U) A; k
      type值可以是:average disk gaussian laplacian log motion prewitt sobel unsharp
/ M3 E& j2 k8 {& @& S( {8 f2 ~# H
8 \/ Q- w  w2 Y实例:
2 y6 [) }4 r2 b5 [使用拉普拉斯算子来增强图像,包括锐化,同时应该保留其灰度色调
$ }) T2 _3 Y1 T& Y, q& I4 y
: k" B6 I' A9 z- Ctest_shape.m
4 {+ {7 ?8 o" }( \* s+ ?: Q: F
  • 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');4 y. x4 w) `5 t/ z

, F. l+ H7 z5 a/ t上面使用拉普拉斯算子产生的w=[0 1 0; 1 -4 1; 0 1 0]; 中心为-4,现在我们手工指定中心为-8的情况如下:
- _( u/ R% l: i' C& S+ g
  • 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');' g8 \$ |/ x" r( ~0 @  E

7 d6 m1 t' o$ I; B
# e* ^5 g$ }. {7 }会发现图像锐化效果更好,图像更清晰。" s+ S9 _# m6 F2 ]* p% u. ?& x

0 v4 O' F% I' u8 g2 y    IPT中的非线性滤波器:
+ l8 j! W* T" J    ordfilt2函数  g = ordfilt2(f, order, domain)
0 x' @2 }0 g4 B- g$ \    中值滤波medfilt29 j0 e- Y2 O# a* R
    图像中加入噪声:格式:J = imnoise(I, type, parm)
# @$ D1 p6 g7 j: l* [$ k1 U8 Q
% _, T) v) y# Z: A. R1 x& Z    >> A=imread('test.jpg');) Q' P" p" _* q# w3 v$ ?3 W
    >> B = imnoise(A, 'salt & pepper', 0.02);3 d: R  g9 O: `9 s5 V
    >> C=rgb2gray(B);2 Q2 P5 V. i, C+ D6 `
    >> D=medfilt2(C, [3 3]);//中值滤波- _8 i5 a1 k/ B7 B3 _
    >> imwrite(D, 'xxx.jpg')" n3 @- [2 `2 r8 \* I
( o9 K- m# v/ S$ c5 `
/ I$ ]% `4 j% T+ |2 A+ E3 e
4. 彩色图像处理
1 J: r$ ?) E1 Q/ u>> A = imread("test.jpg");
7 C  n6 k. \1 k6 L/ H( s3 Q4 I%获取图像R、G、B每个分量
+ @& i4 t2 B& N" ?; {8 q  @) e>> R = A(:,:,1);! O4 G. d3 f( W1 u) M. ]
>> G = A(:,:,2);
  K6 v2 ], T" L9 W4 ~/ d. d3 W0 C>> B = A(:,:,3);% k9 K6 T% M3 D$ H6 }. [1 r# F
>> D = cat(3, R, G, B); //cat组合成图像
+ B8 R. B5 `& T
- h0 J! l) {- M. H3 f- X3 c
  • 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);
    7 m+ ^  q, N  b& K5 e: u( h, L
2 q0 Q" q8 l! w0 d+ k" a5 i7 v# q
( q) F% Y6 f3 f/ F, r9 g4 S- P

" q1 A0 ~7 \  S9 f8 B! l8 @
% [8 F% A: g6 c, A8 F. P- I3 L  L

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-30 13:59 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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