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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
* R$ T6 W( c, L  i
由于工作需要,开始研究一下MATLAB图像处理相关的知识,图像处理只是matlab应用领域中小小的一部分而已。以前只是听说过MATLAB很强大,但没有系统的学过,如今开始学时,发现matlab确实很不错、很高大上。操作起来很方便,特别是编写程序时,比C语言更简洁。
+ z6 Y; g, b9 O; M0 @* [" _0 d9 N* q8 f" _6 i: ^- p
很多人都是大学里就学过matlab的,由于是半路出家,所以知识不是很全面,直接拿了一本冈萨雷斯的MATLAB版的书就开始看,下面做一些简单的小记录。6 d) K$ w. W( O) P% _4 V: F
  Z5 J/ F- Y: }& F( F+ h$ L
1. matlab命令基础:" j; x0 h; o$ U2 X
基础命令:6 {1 b- G% W6 p
# M7 ]  I$ p+ i4 n$ d1 P1 y+ T
clc——清除窗口
9 U: D% I& c. \* c, W7 \% Pclear——清除之前赋值过的变量  N* J: Q1 i* ~! k: }! j
disp——打印信息,相当于echo0 I) P- F7 C+ [# v
celldisp——打印元胞数组内容
, g: Y6 U- w8 Awho——简单的显示当前已有变量
! m- s) s# [) g7 Iwhos——显示所有变量及详细内容 whos也可以指定显示某个变量
$ e5 x3 C  X& `! Dtan/sin/cos/log ——各种数学运算
# Z% J+ u" U( d. M0 U...——用来续行' L9 {1 m( d2 m1 v6 }2 x* f
定义数组——x=1:100
( w" x" s4 d7 ~7 m( }. `0 {定义矩阵——A=[1,1,2] A=[1 2 2]; 加分号表示不显示命令执行结果 定义空矩阵B=[]
: Z3 a; c$ i0 Y  h, {6 f1 Q7 c矩阵转置——A=[1 3 5 7]  B=A' 或 B=A.'可以把行向量转换为列向量7 l9 U+ E8 a/ m' B( i
取元素——A(1)取A中第一个元素  A(1:5)取A中第一到五的元素 ) e5 W1 h$ Q4 F4 m1 ~" r
                  A(1:end)取第1到最后的元素,产生一个行向量; A(:)产生一个列向量8 _* h1 f/ ~6 Q; b, Z( W% n! B
                 A(1:2:end)表示步长为2 步长也可以为负值 如A(end:-2:1)
+ H: \5 C) r( F% c; nlinspace——x=linspace(a,b,n)产生含有n个元素的行向量x n个元素线性隔开 并包含a和b
9 ^* \$ X( M8 ^2 w0 |6 W- ~0 x:的活用——A=[1 2 3; 4 5 6; 7 8 9] A(:,3)取整个第三列  A(1:2, 1:3) 取两行三列* H; t( j" r4 _! K4 T! M5 `% Q( h7 L
+1 z1 H* u; p; R' y# f' C! q4 ~7 q* N8 R
-
5 X$ p' B) l  ^8 R! e*——* 表示矩阵与矩阵相乘,满足线性代数上学的矩阵与矩阵的乘法,
- R3 j; v3 L" h* w( Z/ q, f   .*表示矩阵中元素与元素相乘,这两个矩阵的维数必需相同。/和./也一样的道理( `+ T: @9 Y8 H' M

3 y- i, i1 A  t, e& z8 Q6 ?: E; o* z4 @  ~1 ~
length/size/numel的用法:
! p0 E3 t; v. E9 T0 N7 @: e( O1 Z) W/ ?6 g" [
length(x) ——返回x的长度 如果x是单个变量 返回1 如果x是矩阵 返回该矩阵行数与列数中的较大者。" q1 Y2 Y- Q" L4 v) @0 m3 P" U

7 ?1 l, U) z8 osize(x)      ——当x是单个变量时,返回[1 1] 当x是矩阵是 返回矩阵的行数与列数 可以这样来接受[m n]=size(x)( h+ Q" Q* L5 {5 N0 J6 V7 |- X
' x% K* q9 M* e6 b8 [
numel(x)  ——当x是单个变量时 返回1, 当x是矩阵时,返回矩阵元素总个数。. f, N9 N% ?0 T# W/ {3 `: m1 I

! m- x( l: V2 v0 ^/6 c/ Z& O* v( ~8 u! R9 O' J3 k

% B4 g6 i, X- Iformat compact——以紧凑方式显示; F2 ]  {' x" K8 Z
format loose  ——以松散方式显示3 `. {, \9 i' I+ S, L, r  e4 P

  x2 c3 d3 b1 H" @mean函数:
! n; H" Y9 s+ j; p0 h, L2 M$ T# l9 `& e# N- \, L! R4 G
    >>如果有这样一个矩阵:A = [1 2 3; 3 3 6; 4 6 8; 4 7 7];4 E- @( Q$ m2 X9 U: B
         用mean(A)(默认dim=1)就会求每一列的均值
' j6 R$ q  L; ^         ans =
0 A0 f/ G: i% b- M7 s$ Y( N             3.0000    4.5000    6.0000
* ?1 V& d. U) Q# c) a; g4 f4 w1 a) T- |% [( ]3 A
    >>用mean(A,2)就会求每一行的均值 $ Q8 B; L; U9 z$ g  E$ a) W9 }
    ans =# `+ K0 Z/ J/ O0 J* W! N& `2 K
        2.0000
2 j5 Q# [& G, u& E7 n7 ~; R7 l        4.0000
6 G: ?4 u3 M. C" N        6.0000
1 c' ?8 j- B) P" h) r' d        6.0000
7 d1 d7 h' @2 a0 s' o9 t
) j7 J' O5 ^, L, x" U   >> mean(A(:)) 求总的平均值
1 n. r) G+ H- G/ x6 Y8 o! h3 r% I3 }* L9 M# W. \! P( R* E

' |. u1 E- s6 l/ c% y/ M其他函数:
6 U7 m; V( \! f3 |9 V6 M2 _) Q% R* M8 F/ X
zeros(M,N)——生成一个M*N的double型矩阵 元素均为0" ~& k& w3 }* e) w3 u5 J7 M
ones(M,N)——生成一个M*N的double型矩阵 元素均为1
; _- N0 w0 {7 f3 c+ N) K' ytrue(M,N)——生成一个M*N型的logical矩阵,元素均为1
( h# g6 P5 Q. |9 q  m+ |false(M,N)——与上面的true相反
: C% K* ~# ?2 _: i: R1 dmagic(M,N)——生成一个魔术幻阵) I) k, L% r9 H  s2 [5 T8 k6 O
rand(M,N)——生成一个M*N的矩阵 元素大小在[0-1中均匀分布]
5 S0 ^9 B! Z8 W, L/ `/ n& r, Orandn(M,N)——生成一个M*N的矩阵 矩阵元素正态分布 随机数均值是0 方差是1.
) e4 L* P8 q( ]# L" q3 Wplot(X,Y)——画二维图像
5 O8 p8 r- |/ ~( X. ~8 ksubplot(m,n,p)——m代表生成图像的行数,n是列数,p代表子图编号
. w2 y, i9 M, J7 O9 d9 Aplot3(X,Y,Z)——画三维图/ }3 N, L( N. ~0 a; J, L8 m
mesh(X,Y,Z)——画三维图( F5 u# Q, g8 y# L
suRF(X,Y,Z)——画三维图,并上色" E/ R! d& p6 u+ c8 r
/ l8 d2 A" N! e; I3 {% y
matlab函数设计:& ]1 x. f' \  J! }" f( s

; }$ [6 @" N+ b2 i9 B4 {.m文件建立的函数文件1 G- k, q# l4 @0 P! i
function [A, B] = fun(A, B) //输入A、B两个变量,返回A、B两个变量 一般.m文件名命名为函数名字
, I- x1 h  k+ C2 `( }* B$ R% xxxxxx 代表注释,在命令窗口中输入help fun可以显示这个注释
% R7 O) L2 x/ z: K! {2 n
  ]6 J& o- _" f" _
* e' m) r" \, T) }; g实例:
  i. |! T7 c( W# q" p; @
  • 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
    0 H7 U* B% O9 n3 f" T
) H8 b$ e" O0 @* K8 S$ Y: ^( j3 }  D
调用时写tow(10),就可以计算1~10的和。7 W. H* |  x! [8 t. c

" D2 x8 K1 G1 m4 B# O9 X$ m; z5 h  f; A9 N
匿名函数:9 L6 N; E8 z) V- i0 ^

" i# B+ Q' Q2 ~$ Z0 W/ O$ D& Cvar = @(x)(x+1)
. L8 j! x6 q/ p1 Y9 ?" `调用时形如var(1)即可,@后面跟参数列表
* k) l4 k6 `) Y$ [- ?* q9 {, W
6 ]2 T5 [  z/ g# B/ i接受用户输入信息:
7 ?2 M( z0 ]$ p7 l2 |t = input('Enter you data:', 's');
. _; V) k( `0 ~) K4 F+ pt='12.6, x2y, z';; O0 G( s  T* C- l6 l
[a,b,c] = strread(t, '%f%q%q', 'delimiter', ',') //按指定的格式读入a b c) j; C  B$ o, U$ e3 |

9 \( p% M/ t& v# h/ Omatlab中,图像大致分为二值图像(0/1)、灰度图像(0-255灰度级)、RGB图像(R、G、B三个分量 三个分量都相同时,所表示的颜色就退化为灰度)、索引图像。
( l; W: A' n) |3 b; d* m      灰度、亮度、强度通常是同一个概念。4 @, P1 a) I- J
      所有图像按照特性分为位图和矢量图,位图常见格式:JPG GIF BMP矢量图:PNG8 ]+ O: R  s0 l; A5 \. b
      机器视觉又称计算机视觉,试图开发出一种模拟人眼的能力,能够理解自然景物与环境的系统,比较高级哦。- g( b" y) |" L& u, z$ v0 B! `

' W* p. X6 y2 M( cnargin将返回输入到函数的参数个数、nargout用于函数的输出
# J, X+ \' `& u5 Z& I0 a% Z9 ?nargchk用于检查参数数目是否正确margchk(low, high, number),使用实例:* K. L6 K% l/ x  T
function G = test(X, Y)0 L/ |* b  i# t& B# S4 f1 [9 }
error(nargchk(1,2,nargin));
/ K- s8 H8 }3 U/ t  B4 y
* {) T9 ^5 W  [$ B8 T+ ?/ E; e3 H$ h9 m" _6 N9 ?
2. 图像处理基础:
. O2 B% D: h( n# n( f; i. |3 Z1 Mimread——读入图像A=imread('1.jpg')8 }  `4 ?- V5 V% X1 C  L
imshow——显示图像imshow(A, B);  imshow(A, [low high]);
" K# Z$ e+ ^, I: h4 ~                    会将所有小于或等于low的值显示为黑色,大于或等于high的值显示为白色
: C0 E+ W0 N; B8 ?$ J+ N+ S                    若B省略,默认的灰度级是256,imshow(A, [])  []表示将low设为A的最小值 将high设为A的最大值
) @% p' ^. r$ M6 ?+ M/ N                    显示多幅图像:imshow(A), figure,imshow(B)) X5 i, z9 P3 @2 u: `5 A) p% N
imwrite——保存图像 imwrite(A, '2.jpg')
2 _4 d9 ^& X7 M8 n+ b                     imwrite(A, '2.jpg', 'quality', q) // q在0-100之间(由于JPFG压缩 q越小图像退化越严重)8 K. K* j8 l4 R7 H6 ?, C# v+ I
size(A)——显示图像的大小6 A5 M1 {1 h0 k' R8 g* a3 ]5 {: O
imfinfo——显示图像的详细信息 imfinfo 1.jpg 也可以K=imfinfo('1.jpg') 就可以使用K.Height K.Width等等信息+ E! B2 g* ^! K% i0 X
                    学会计算图像的压缩比:imgBytes=(K.Height*K.Width*K.BitDepth/8) compress_bytes=K.FileSize
0 @" d! A( g" t: }  s* n                    imgBytes / compress_bytes ==压缩比$ ?+ R& i- j! K/ W, k

' y, C% F) [4 a0 B0 ?, @: I7 A9 @( x. B                    命令窗口输入:imfinfo test.jpg,显示信息如下:                    
; i4 H& q: c) J* G
/ h! {( f/ c. I6 @" S
  • 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: {}+ r2 L6 H) t" m, M2 Z; F" a

& t4 }% k' s" T: K% p& \  t
9 X$ Y: R2 K: J# Ndouble/im2double/mat2gray的区别:
, v- Y) H6 Y5 A+ p
- ]0 Y& r( d9 p3 m  c        A=imread('1.jpg');4 R9 W  u. W1 I2 s

4 p( `$ C; `+ m        A(1,1,:)          ——显示A中第1行第一列像素点(包含红、绿、蓝)三个分量的值$ C0 F9 T4 x0 U6 {9 b  e% [; \
   
3 J$ m8 v: l7 M7 g3 n4 E) F+ b2 L        B=double(A)——转换为double类型 值不会变 注意 使用im2double值会[0-1]
+ C1 [3 ]3 t0 R9 S0 A4 w  r& A) u3 [        im2double   ——若输入是uint8类型 每个值会除以255.
! x* I( h/ a) u/ ?' I4 c; E        mat2gray()   ——可以将double类型转换为归一化的double类型
6 p5 o3 ~  o* b9 i        区别:) f6 J1 J. v! M) _" m' S. C
        im2double:如果输入类型是uint8、unit16 、logical,则按照0-->>0,255-->>1,将其值按比例处理成0~1之间的double数值;如果输入类型是double,输出没有处理;
) Z% s& k" q! L9 s9 `: x" H  [( f/ e9 x0 W& V3 B% ~* [
        double:返回数值与输入相同的double类型矩阵;: c# Z2 c( J" Q3 [8 M( k2 \! Y
$ e: `6 k2 A; E7 p1 S9 z7 q3 E" X8 F
        mat2gray:对输入进行归一化处理,最小值-->>0;最大值-->>1,输出类型为double。  d8 ]6 E" ~! `& o0 s/ N
        在实际的对图像处理过程中,由于我们读入图像是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此通常使用im2double函数将图像数据转换成双精度型数据。
# R: |; ?, ~* Y+ u
! t1 s0 o. x* L) p2 u$ j/ ?+ i9 E注意:uint8类、uint16类RGB图像取值范围分别是[0, 255]、[0, 65535],而double类范围是[0, 1]& }3 f% B. |: m6 @
% b9 g! ]6 d+ h9 ?: _
C=[-1,0.5; 2,3]
9 N* \4 E5 ^4 F4 e6 vB=im2uint8(C)——im2uint8把所有大于1的值转换为255 小于0 的值转为0 其他值乘以255
7 v+ [1 u! B2 l# x+ A8 f3 w9 Cim2bw          ——得到二值图像 可以先A=mat2gray(B), im2bw(A, 0.5)9 _; v' @9 F9 W5 _

  E+ K) Q( f" C- ?0 X
( Z; Z; |8 c+ y3 IIPT支持的图像的算术函数:
0 ^0 X' j6 @/ K* Himadd——图像相加0 I% a6 c$ Q! `# M
imsubtract——图像相减
2 m9 `+ j% q  _% Fimmultiply——图像相乘
5 I% O) [5 i( p2 n( `9 Z- H2 V" kimdivide          ——图像相除- H. a2 G. C- x
imabsdiff——计算两幅图像之间的绝对差
) W/ M$ I  n! s4 S& z# Y- Gimcomplement——对图像求补
$ z7 U5 S( E8 b3 J1 \8 F! P: ]imlincomb——计算两幅或多幅图像的线性组合
! [; n# M/ N- B( U' `7 V: J4 g1 y( D( M+ }; C, H* x# q4 R2 E0 g( D
图像旋转函数:- _" [9 N( ~/ ?- Y: ]
3 L+ b# ]) l) N1 T8 K
imrotate,matlab默认是逆时针旋转, imrotate参数解释:
7 ?: h! k$ n* ^" _; r, S9 ?. C/ T1 I+ M. ~6 p
        angle顾名思义 就是你旋转的角度, method 就是你实现旋转用的是什么方法,有三种  和后面的插值放大缩小是一下就是 最邻近插值法 双线性插值法 三次卷积插值法,英语表示就是  'nearest'    'bilinear'    'bicubic'。
; _; I2 d: g4 n$ x1 W( X: r        不同的插值方法得到的旋转图像有细微的差别 如果你不选在 matlab默认的是最邻近插值法 那么图像会有一定的失真,这个失真主要是因为matlab在计算每个点的新坐标的时候得到的数值不是整数,要去整所造成的最后说说bbox   这个的意义主要分为2种,也就是说我们在这一项有2个选择 一个是‘loose’ 另外一个是‘crop’' ~# X( n; l- V( S' \9 a9 N3 \7 E$ v5 ]
        loose  就是宽松的意思 顾名思义就是说 图像旋转后 系统会给予一个宽松的环境去匹配它,这样你得到的图片就是一个完整的图片
0 w% y, t5 O9 A- Y6 ~8 V7 O* e  ?5 o$ {$ p1 j. q
        matlab的解释是 When BBOX is 'loose', B: C3 C1 S  x" r2 c/ h: o4 s9 y( \
& O9 E+ ]5 t) q; ?" z9 K
        includes the whole rotated image, which generally is larger than A.
% ]* c+ P  ?7 _% R# V; _        crop 就是剪切啦,也就是困扰了大家很久的问题,为什么旋转后图像变小了,因为matlab默认的是crop  超过图片原来大小的部分被crop了
( r3 H( x' v3 v( @
4 m9 C+ H0 w' t& e' z
  • >> 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'));
    1 v; p6 f' F  L. l
) \8 S8 E/ M% H) ^( [6 _
% q9 ^9 q! S  u
3. 亮度变换与空间滤波:8 A3 w3 M- n# q2 R/ k
1. 亮度, `% b& a' F6 D7 B* ~5 O
    imadjust函数
- {* _& x) @: a4 N1 ^    A=imread('1.jpg');  \7 f6 w  F4 S5 O% Q& j+ p
    B= imadjust(A, [], [], 0.75); // gamma<1 变亮
) @. P8 J, D9 k. m    imshow(B)
; t: |' T5 Y7 r- Y+ b+ Z7 P( L) {) J' r4 C1 ?; V$ ?+ m
    C=imadjust(A, [0 1], [1 0]);' K* c& V6 m5 y: J' k
    效果等价于C=imcomplement(A) 都是求图像的负片 : C6 `- N! L9 Z0 U0 t; S
2. 对比度拉伸函数( k* K3 B, U: @
     g = 1./(1+(m./(f+eps)).^E) // 加eps是为了防止溢出
  L) ?5 V( O5 _" h: s3. 直方图9 Z5 `0 E! I* _% q6 j$ W) ~1 x
    imhist函数:2 n9 h  a# p. t' j3 Z
    h = imhist(f, b) //b是灰度级个数 默认是256
$ q; `, F3 }0 t    numel(f) //得到像素点个数4 ~" K4 H% f6 X- H/ q
    B=rgb2gray(A); subplot(121), imshow(B); subplot(122), imhist(B);! @& C3 f1 \2 r; F) p3 _
    直方图均衡化:
5 i0 v. [  X% D2 {    histeq函数:
) m: z) C6 N. Q6 t) g5 x    J=histeq(I)
1 x' y* y* D$ w( Z: B7 V* e* Q3 P) P% h8 j$ U

% c# [+ @3 v: H实例:
. x+ Y- q  s' J2 m- g. L+ x4 R
  • >> A=imread('test.jpg');
  • >> B=rgb2gray(A);
  • >> imhist(B);//显示直方图
  • >> figure;
  • >> imhist(histeq(B)) //显示均衡化后的直方图
  • >> C=histeq(B);
  • >> imwrite(C, 'xxx.jpg');1 }9 Q4 P- P5 ^  |0 ]5 [

$ B- `2 `& W7 t: z. N) h. D. N- G* r
, q) @% a5 ^/ j图像如下所示:8 s1 y0 b& c' v" r% R9 @

8 [( C/ n  R8 ^/ f" J" q 3 A1 ~' \. |& Y7 j. x
, N9 H  a% O; L8 n. F+ L. y
$ R$ d- H' s7 ?- n% R
7 |, R) x  h# g, w4 X  x. d

5 Z3 o( L( v( {0 T4 l2 }% |0 _0 ~# K4. 空间滤波:
8 D* L# }' i8 B) ~7 P0 h2 m+ r9 A) ]! @9 g+ z2 B
    线性空间滤波:imfilter函数
9 k9 U, |0 t/ @; N  h. h: w    g=imfilter(f,w,filtering_mode, boundary_options, size_options);
3 k  Z5 y4 F1 W+ P7 P    //filtering_mode=corr/conv size_options=same/full
1 Q  K! y/ W; E) b: [- X    通用语法为 g = imfilter(f, w, 'replicate');; [. E# J0 P; s. W( g$ G3 o+ L, u
    非线性滤波:colfilt函数
: }8 Z7 H' H- n9 d
  y  U* f) f* l. G( h. h- K: Z    IPT中的线性滤波器:6 @, c7 V# K4 `6 s# t
      fspecial函数用来生成滤波掩膜w  p2 k4 d' Q2 T% k9 ^* N
      w = fspecial('type', pARM) //type表示滤波器类型
7 f% \5 c! e* ^3 e0 d4 k  M7 a      type值可以是:average disk gaussian laplacian log motion prewitt sobel unsharp
' A7 {6 m6 \9 m# ~5 P* n8 B) @9 Z0 c% U& C  t
实例:
5 n2 }- T, y! g! [7 `8 s* ^- X8 a使用拉普拉斯算子来增强图像,包括锐化,同时应该保留其灰度色调
: W9 D  T: O- I9 e9 `) Q' b1 V/ d% r% f9 Y2 s5 M9 D
test_shape.m3 o# T: g2 _, H" n! p" {
  • 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');5 Z$ R( z# m. w& m4 t
( m  ?1 A" W0 |7 S; D' `
上面使用拉普拉斯算子产生的w=[0 1 0; 1 -4 1; 0 1 0]; 中心为-4,现在我们手工指定中心为-8的情况如下:
, _& y8 ^! M" t% u
  • 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');8 Z5 A+ L! q8 g  z7 H9 n
( D9 ]9 j) j, M" a  c- f2 g4 C
( [" r: K7 n9 Q! Z
会发现图像锐化效果更好,图像更清晰。
( g* B- {; B! _" {: d0 c6 X+ g$ n4 z, o. u
    IPT中的非线性滤波器:
0 A9 {  @5 G3 k    ordfilt2函数  g = ordfilt2(f, order, domain)
, I/ i1 U1 ]* Z7 b0 j3 F    中值滤波medfilt2
+ r; q) J! k7 b    图像中加入噪声:格式:J = imnoise(I, type, parm)* z' a# n; x; O5 V
) ]* a' m  K* l
    >> A=imread('test.jpg');
' w9 W; f: F  e& v" v; {    >> B = imnoise(A, 'salt & pepper', 0.02);  }) G. g# h* K* F$ W$ u9 @
    >> C=rgb2gray(B);
+ p9 ^7 \+ G+ i: P7 c" D    >> D=medfilt2(C, [3 3]);//中值滤波
/ e* I! p2 ]3 E6 w3 P1 I    >> imwrite(D, 'xxx.jpg')) Y) z2 G1 J. t( p9 D6 S/ L) v: j

6 ?; F8 A8 k1 P. }3 t/ f
/ A2 z! f5 k! ]0 _4. 彩色图像处理- O- T+ ?4 M5 g4 u; e$ Q4 k0 W9 j/ F! |
>> A = imread("test.jpg");4 c. q9 f  t: m* c# f3 g3 U
%获取图像R、G、B每个分量
* v* S$ z# F- o$ a! E- C>> R = A(:,:,1);9 w3 h# e2 A$ h; G5 Y" t
>> G = A(:,:,2);
0 ]' P( k# \, p>> B = A(:,:,3);/ m6 Q6 i6 p6 o& A9 y% x
>> D = cat(3, R, G, B); //cat组合成图像
& W4 E6 C$ ]6 ~5 B+ e1 D6 O; W# M' Q  Z8 ]# O
  • 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);" k# m/ D3 l% s; n
0 i" i" S  o0 ?; x" j

1 G- w& u7 E: V5 {' O  @" E' N: G) [) O6 Z' R; b5 v
; s, j$ i! |  f) I

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-5 17:28 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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