《数字图像处理》--冈萨雷斯(第二章)

基本原理

数字图像的表示

​ 坐标约定:

  • 多数图像处理书籍中所用的坐标约定
  • 图形处理工具箱中所用的坐标约定

图像的矩阵表示

读取图像

>> f = imread(filename);

​ filename 是一个含有图像文件全名的字符串,此处可以用相对路径和绝对路径

>>size(f)

​ 函数size可以给出一幅图像的行数和列数

>> whos f

函数whos可以显示出一个数组的附加信息

显示图像

>> imshow(f,G)

​ f是一个图像数组,G是显示该图像的灰度级数(若G省略,则默认的灰度级数是256)

​ 其他表示法:

>> imshow(f,[low,high])

>> imshow(f,[ ])

​ 同时显示两个图像

>> imshow(f), figure, imshow(g)

保存图像

>> imwrite(f,'filename')

>> imwrite(f,'firstImage','tif')

​ 或

>> imwrite(f,'firstImage.tif')

使用imfinfo保存图像

>> imfinfo filename

​ 执行完此命令后会输出该图片的相关信息,可通过相关信息了解该图片相关属 性

imwrite的另一种常用但只适用于tif图像的语法

imwrite(g,'filename.tif','compression','parameter','resolution',[colres rowres])

利用print保存图像可以获得更多的输出参数

print -fno -dfileformat -rreson filename

图像类和类型间的转换

im2uint8

​ 函数im2uint8将输入中所有小于0 的值设置为0 ,所有大于1 的值设置为 255 再将所有的数都乘255,并将结果四舍五入为最接近的整数后,就完成了转换。

im2double

数组索引

​ 作用:简化了数组操作,而且提高了程序的运行效率。

向量索引
  • 向量的第一个元素下标为1

  • .' 行向量转换为列向量

  • 函数 linkspace

    x = linspace(a, b, n)

矩阵索引
  • 矩阵中分号的作用,与前面提到的取消命令的输出或在一行中写入多条命令时所用分号的作用是不同的
  • 矩阵中最后一个元素的索引可用 end 来代替

​ 其中E显示了A中行1列2,行3列2,行1列3,行3列3对应的值

  • 使用数组索引对图像进行简单的操作

    翻转

    此处遇到的问题:

    ​当用此图片进行翻转时,出现如下状况:

​ 经过检验发现 size(f) 有三个参数,上网查询知道是由于原图片为彩色图像,改为黑白图像即可

原图像

原图像

翻转后的图像

翻转后的图像

部分图像

部分图像

一些重要的标准数组

  • zeros(M,N)
  • ones(M,N)
  • true(M,N)
  • false(M,N)
  • magic(M)
  • rand(M,N)
  • randn(M,N)

M函数编程简介

M文件组成部分
  • 函数定义行
  • H1行
  • 帮助文本
  • 函数体
  • 命令

​ 函数行:

​ 函数定义行的形式为:function [outputs] = name(inputs)

​ 输入必须在()内,输出必须在[ ]内,但是如果输出只有一个变量则可以 省略[ ]

​ H1行:

​ 该行提供了关于M文件的重要摘要信息

​ 帮助文本:

​ 跟在H1行后面的文本块,为函数提供注释或在线帮助。

​ 函数体:

​ 包含了所有执行计算并给输出变量赋值的MATLAB代码。

​ 例如执行sumprod.m文件

>> edit sumprod

运算符
  • 执行数值计算的算术运算符
  • 在数量上比较操作数的关系运算符
  • 执行韩式AND、OR和NOT的逻辑运算符
一些重要的变量和常数
函数返回值
ans最新的答案
eps浮点数的相对精度
i(或j)虚数单位
NaN或nanNot-a-Number
pi3.14159265358979
realmax计算机所能表示的最大浮点数
realmin计算机所能表示的最小浮点数
version
流控制

​ if、else、for 、 while、 break、continue…

​ 将例2.12中的

“`

          for r = rx:rowhogh

            xcount = xcount + 1;

            ycount = 0;

            for c  = cy:colhigh

                ycount = ycount + 1;

                s(xcount,ycount) = f(r, c);

            end

        end  

“`

​ for改成while

r = rx;
while r~=rowhigh
    r = r + 1;
    xcount = xcount + 1;
    ycount = 0;
    c = cy;
    while c~=colhigh
        c = c + 1;
        ycount = ycount + 1;
        s(xcount,ycount) = f(r, c);
    end
end
代码优化
交互式I/O
单元数组与结构简介
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值