matlab 函数记录

matlab 0不可索引

  1. a = imread(‘D:\mdata\111.jpg’)
  2. a(3,3,:) #图像即矩阵,显示此处rgb值
  3. imshow(a)
  4. image(a) #显示图像
  5. c = magic(3) #生成一个3*3矩阵,每列的和均相等
  6. sum(c) #计算每列的和的值
  7. image(c) #显示该magic生成矩阵
  8. subplot(3,2,1)#多个图画在一起,3*2,现在画第一个图;
  9. imfinfo(‘D:\mdata\111.jpg’)
ans = 

  包含以下字段的 struct:

           Filename: 'D:\mdata\111.jpg'
        FileModDate: '20-Jun-2017 17:08:11'
           FileSize: 48142
             Format: 'jpg'
      FormatVersion: ''
              Width: 646
             Height: 650
           BitDepth: 24
          ColorType: 'truecolor'
    FormatSignature: ''
    NumberOfSamples: 3
       CodingMethod: 'Huffman'
      CodingProcess: 'Progressive'
            Comment: {}

图像类型分为:二进制图(黑白),索引图,灰度图,真彩色(rgb)
二进制图:

>> AA = [1,1,0;0,1,0;1,0,1];
>> imshow(AA,'InitialMagnification','fit')

索引图:
索引图像包括一个数据矩阵X,一个颜色映像矩阵Map。其中Map是一个包含三列、若干行的数据阵列,其中每个元素的值均为[0, 1]之间的双精度浮点型数据。Map矩阵的每一行分别表示红色、绿色和蓝色的颜色值。
灰度图:
实质是一个数据矩阵I,该矩阵中的数据均代表了一定范围内的灰度级,每一个元素与图像的一个像素点相对应,通常0代表黑色,255为白色。代表像素的亮度。
RGB:
对一个尺寸nxm的彩色图像来说,MATLAB中则存储为一个nxmx3 的多维数据数组,其中数组中的元素定义了图像中每一个像素的红、绿、蓝颜色值。图形文件格式把RGB图像存储为24位的图像,红、绿、蓝分量分别占用8位

  1. matlab图像格式转换
    • rgb转化成灰度图
 l=rgb2gray(a);
>> subplot(2,2,1);
>> imshow(a);
>> title('rgb')
>> imshow(l);
>> title('gray')
  • 灰度图转化成索引图
m = gray2ind(l);
>> imshow(m)
>> subplot(2,2,1);
>> imshow(a);
>> title('gray');
>> subplot(2,2,2);
>> imshow(l);
>> title('gray');
>> subplot(2,2,3);
>> [x,map]= gray2ind(l);%灰度到索引图;
>> imshow(x);
>> title('灰度转索引,x矩阵');
>> subplot(2,2,4);
>> imshow(map);

原图:650*646*3 ,灰度图:650*646uint8;x矩阵:650*646;map索引矩阵:64*3 double

  • 矩阵2灰度图
    I=mat2gray(X,[Xmin,Xmax]):按指定的取值区间[Xmin,Xmax]将数据矩阵X转化为图像I,Xmin对应灰度0,Xmax对应灰度1。如果不指定区间[Xmin,Xmax]时,MATLAB则自动将X矩阵中最小设为Xmin,最大设为Xmax。
%graytoindex
mat = magic(10);
gg = mat2gray(mat,[5,80]);
imshow(gg,'InitialMagnification','fit');
  1. 图像显示
    imshow(i);
    imshow(i,[50,200]); : [] 限制区间,则为0黑,高于则为255白
    imshow(X,map):显示索引图
    imshow(RGB) : RGB为一个mXnX3的图像数据阵列,
    该数据整列属于double类、uint8类、unit16。
    数据阵列中元素的取值取决于该矩阵所属类型。
    如果该数据阵列属于double类,则其元素的取值范围是[0 1];
    如果该数据矩阵属于unit8类,则其元素的取值范围是[0 255];
    如果该数据阵列属于uint16类,则其元素取值范围是[0 65535];

  2. 特殊图像的显示
    imshow 之后,使用colorbar

  3. 子图像
    subimage()isplay multiple images in single figure. help 文档中推荐使用imshow;
subplot(1,2,1);
subimage(a);
subplot(1,2,2);
subimage(500,500,l);

这里写图片描述
区别主要体现的左上角的坐标值上??
12. 纹理映射
warp(X,map)
warp(I,n)
warp(BW)
warp(RGB)
warp(z,…)
warp(x,y,z,…)
h = warp(…)
举例
[x,y,z] = cylinder;
I = imread(‘testpat1.tif’);
warp(x,y,z,I);

  1. 图像代数运算
    imadd(a,b); %容易使数据溢出,imadd进行截取操作,称为饱和处理;也可以预先将图像转化为另一种数据范围较广的数据类型,如uint8 – uint16
    imadd(a,50);
    imsubtract(a,b);
    imsubtract(a,50);%减法操作

%乘法操作 1.掩膜(屏蔽图像中某些部分) 2. 放大缩小 3. uint8 容易溢出,饱和截取操作;或者预先转化为 uint16数据类型。
immultiply(A,B);
immultiply(A,5); %不改变图像大小,但是改变像素值

  1. 除法
    imdivide(a,2)
  2. 图像缩放
    imresize(a,2) %默认使用最近邻插值
    imresize(a,m,method)%method 插值方法
    imresize(a,[mrows,nclos])% 限定输出的大小
  3. 图像旋转
    imrotate(A,angle)
    imrotate(A,angle,method)% nearest最近邻插值/bilinear双线性插值/bicubic双三次插值
    imrotate(A,angle,method,bbox)% bbox 为‘crop’,取图像中间部分,使截取的图片与原图像大小相同;
  4. 图像剪切,只能是矩形
    imcrop(a)
    imcrop(I, rect) % rect 是一个四元向量,【xmin,ymin,width ,height】
    [a,rect] = imcrop(…) 在用户手动选取剪切矩形框时,同时返回剪切框的参数rect
    [x,y,a,rect] = imcrop() ;

数值计算

a = int8(128)    % a = 127
a = round(128.4) % a = 128 四舍五入
a = round(128.5) % a = 129
a = fix(128.4)   % a = 1280 取整
a = fix(-128.4)  % a = -128
a = floor(128.5) % a =128  不大于x
a = ceil(28.4)   % a = 129 不小于x 的最小整数取整

// 创建数组
A= []
A = [1 2 3 4]
A = ones(1,5)
A = 1:5
A = 1:0.5:5
//二维数组
A =  [1 2 3; 4 5 6]
A(2) = 4 ;       % 默认索引从列开始
A = ones(3,3)
A = [1:3 ; linspace(4,6,3);  7 8 9] # linspace(start,stop,n) 等差数列

size(A)         % 获得数组的尺寸大小和维数
legth(A)        % 返回数组的行列 中最大的值

matlab中生成随机数,主要有三个函数:rand, randn,randi

rand 生成均匀分布的伪随机数。分布在(0~1)之间

a =rand()

a =

    0.1270

>> b = rand(1,5)

b =

    0.9134    0.6324    0.0975    0.2785    0.5469

>> b = rand(2,5)

b =

    0.9575    0.1576    0.9572    0.8003    0.4218
    0.9649    0.9706    0.4854    0.1419    0.9157

>> c = rand(2,5,'double')

c =

    0.7922    0.6557    0.8491    0.6787    0.7431
    0.9595    0.0357    0.9340    0.7577    0.3922

>> c = rand(2,5,'single')

c =

  2×5 single 矩阵

    0.6555    0.7060    0.2769    0.0971    0.6948
    0.1712    0.0318    0.0462    0.8235    0.3171

randn 生成标准正态分布的伪随机数(均值为0,方差为1)


>> aa = randn()

aa =

    1.3703

>> bb = randn(2,5)

bb =

   -1.7115   -0.2414    0.3129   -0.0301    0.6277
   -0.1022    0.3192   -0.8649   -0.1649    1.0933

randi 生成均匀分布的伪随机整数 ;
randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机整数
randi(iMax,m,n)在开区间(0,iMax)生成mXn型随机矩阵 ;
r = randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成mXn型随机矩阵。

 aaa = randi(3)

aaa =

     3

>> bbb = randi(3,2,5)

bbb =

     1     2     1     3     2
     3     1     2     2     1

>> bbb = randi([3,5],2,5)

bbb =

     5     4     5     4     3
     3     5     5     3     3

diag 对角线矩阵的生成方法

x = diag(v, k) % v为向量,X为矩阵

以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。

v=diag(X,k) % X为矩阵,v为向量 ; 取矩阵X的第K条对角线元素为向量v

v = [1 3 2]

v =

     1     3     2

>> A = diag(v)

A =

     1     0     0
     0     3     0
     0     0     2

>> B = diag(v , 3)

B =

     0     0     0     1     0     0
     0     0     0     0     3     0
     0     0     0     0     0     2
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0

>> C = diag(v,-1)

C =

     0     0     0     0
     1     0     0     0
     0     3     0     0
     0     0     2     0

图像反转–负片

g = imadjust(f,[lowin,highin],[lowout,highout],gamma)

[] [] 两个数组均对应的是 0 - 1, 至与灰度值与数值类型有关,
gamma = 1 负片
gamma < 1 图像高亮
gamma > 1 图像变暗

负片公式2

g = imcomplement(f)

灰度值图像归一化:

g = mat2gray(f)
class(g)     #值为double
max(g(:))    #归一化到【0-1】

将压缩至或者归一化的值 还原到 全范围

b = im2unit8(g)  #将【0-1】的图像还原到【0-255】
class(b)         #值为uint8

直方图统计

h = imhist(f,b)  #b为生成灰度级分级的个数,h单列向量和b同维;
h(1)             #从1开始索引
h(10

统计一副图像素总数

numel(f)

绘制直方图

bar(h)
histogram(h)

直方图均衡化–处理灰度等级比较窄的图像,均衡化,提高对比度

clear all;
I_gray = imread('E:\coding\cv+dip\gsls\dip\CH03\guwu.tif');
subplot(3,3,1);imshow(I_gray);                                 
title('灰度图像');
subplot(3,3,2);imhist(I_gray);
title('灰度图像直方图');%显示灰度图像及直方图

[height,width]=size(I_gray);

r=zeros(1,256);
for i=1:height
   for j=1:width
       r(I_gray(i,j)+1)= r(I_gray(i,j)+1)+1;
    end
end  %计算灰度直方图中的数值:每个灰度级对应的像素数目。
subplot(3,3,3);stem(r);
title('计算所得灰度图像直方图');

s=zeros(1,256);
s(1)=r(1);
for i=2:256
    s(i)=s(i-1)+r(i);
end         %累积分布函数:对应的也是像素的数目。
subplot(3,3,4);stem(s);

for i=1:256
    s(i)=floor(255*s(i)/(height*width));
end   % s(i)/(height*width) 为频率,*256 为归一到0—255之间,floor为取整(整数部分)函数。【round为四舍五入函数,ceil为取整数部分加1】



 I_HE=I_gray;
for i=1:height
   for j=1:width
       I_HE(i,j)= s(I_gray(i,j)+1);
    end
end%得到均衡化后的图像。s(1)~s(256)里的数值即为灰度值,1~256标号对应的是原始灰度图像的0~255的灰度值。

m=zeros(1,256);
for i=1:height
   for j=1:width
       m(I_HE(i,j)+1)= m(I_HE(i,j)+1)+1;
    end
end  %计算直方图中的数值:每个灰度级对应的像素数目。
subplot(3,3,9);stem(m);
title('计算所得均衡化后图像直方图');



imwrite(I_gray,'1gray.png');
imwrite(I_HE,'1he.png'); 
subplot(3,3,7);imshow(I_HE);                          
title('均衡化后的图像');
subplot(3,3,8);imhist(I_HE);
title('均衡化后图像直方图');

这里写图片描述
直接套用公式histeq(f):

hb = histeq(I_gray);figure;imshow(hb);figure;imshow(I_gray);

线性滤波器

%平均滤波器
I=imread('E:\coding\cv+dip\gsls\dip\CH03\guwu.tif');
subplot(231)
imshow(I)
title('原始图像')
I1=imnoise(I,'salt & pepper',0.02);
subplot(232)
imshow(I1)
title(' 添加椒盐噪声的图像')
k1=filter2(fspecial('average',3),I1)/255;          %进行3*3模板平滑滤波
k2=filter2(fspecial('average',5),I1)/255;          %进行5*5模板平滑滤波

k3=filter2(fspecial('average',7),I1)/255;          %进行7*7模板平滑滤波
k4=filter2(fspecial('average',101),I1)/255;          %进行9*9模板平滑滤波
subplot(233),imshow(k1);title('3*3 模板平滑滤波');
subplot(234),imshow(k2);title('5*5 模板平滑滤波');
subplot(235),imshow(k3);title('7*7 模板平滑滤波');
subplot(236),imshow(k4);title('9*9 模板平滑滤波');

掩模越大,图像越模糊!
中值滤波

I=imread('E:\coding\cv+dip\gsls\dip\CH03\guwu.tif ');
J=imnoise(I,'salt & pepper',0.02);
subplot(231),imshow(I);title('原图像');
subplot(232),imshow(J);title('添加椒盐噪声图像');
k1=medfilt2(J);            %进3*3模板中值滤波
k2=medfilt2(J,[5,5]);      %进5*5模板中值滤波
k3=medfilt2(J,[7,7]);      %进7*7模板中值滤波
k4=medfilt2(J,[9,9]);      %进9*9模板中值滤波
subplot(233),imshow(k1);title('3*3模板中值滤波');
subplot(234),imshow(k2);title('5*5模板中值滤波 ');
subplot(235),imshow(k3);title('7*7模板中值滤波');
subplot(236),imshow(k4);title('9*9 模板中值滤波');

获取系统掩膜函数
H=fspecial(type,parameters)

type为字符串,制定了掩膜类型。如’average’表示均值掩膜。H为返回的掩膜矩阵,数据类型为double.

正方形均值掩膜,h=fspecial(‘average’,n),n为掩膜大小,n*n,默认值是3.
高斯低通掩膜,h=fspecial(‘gaussian’,n,sigma),n为掩膜大小n*n,默认为3.sigma为高斯分布方差。
二维拉普拉斯掩膜’laplacian’,h=fspecial(‘laplacian’,alpha),alpha控制掩膜形状,范围是[0 1],默认值0.2,
反锐化掩膜’unsharp’,h=fspecial(‘unsharp’,alpha)alpha控制掩膜形状,范围是[0 1],默认值0.2
水平锐化掩膜’prewit’,h=fspecial(‘prewit’),如果想用垂直锐化,则用h’
sobel水平锐化,h=fspecial(‘sobel’),如果想用垂直锐化,则用h’

添加噪声

 imnoise(A,type,parameters

Z=imnoise(A,’gausiaan’,m,d);其中m是均值,d是方差
注意高斯噪声中,m,d指定时要注意转换,例如,对于uint8类型的图像,添加均值为100,方差为200的高斯噪声,
m=100/255,d=200/(255^2);
椒盐噪声
Z=imnoise(A,’salt & pepper’,d),d范围是[0 ,1],表示噪声密度,即含噪声值的图像区域的百分比。默认值是0.05。噪声是最小值和最大值两种。
泊松分布噪声
Z=imnoise(A,’poisson’)
膨胀函数(加长 - 变粗;dilate);

 i = imread('E:\coding\cv+dip\gsls\dip\CH09\DIP3E\text.tif');
b = [0 1 0; 1 1 1; 0 1 0];   #结构元素
i2 = imdilate(i,b);
subplot(1,2,1);imshow(i);
subplot(1,2,2),imshow(i2)
i3 = im2bw(i);

构造结构元素函数,strel

se = strel('diamond',3)   #se是特殊结构体
se.Neighborhood = 
false   false   false   true    false   false   false
false   false   true    true    true    false   false
false   true    true    true    true    true    false
true    true    true    true    true    true    true
false   true    true    true    true    true    false
false   false   true    true    true    false   false
false   false   false   true    false   false   false

se.Dimensionality = 
2

腐蚀erosion;收缩;细化;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值