码迷,mamicode.com
首页 > 其他好文 > 详细

数字图像处理(MATLAB版)学习笔记(2)——第2章 灰度变换与空间滤波

时间:2017-04-08 22:13:25      阅读:387      评论:0      收藏:0      [点我收藏+]

标签:线性   jpg   entity   UI   9.png   使用   osi   pre   数字   

0、小叙闲言

 

1、本章整体结构

 技术分享

2、书中例子

例2.1 主要是使用函数imadjust,来熟悉一下灰度处理,体验一把

>> imread(myimage.jpg);
>> f=imread(myimage.jpg);
>> g1 = imadjust(f, [0 1], [1 0]);
>> imshow(g1);
>> imshow(f);
>> g2 = imadjust(f, [0.5 0.75], [0 1]);
>> figure;imshow(g2);
>> g3 = imadjust(f, [], [],2);
>> figure;imshow(g3);

处理前后效果,还可以,f到g1的变换,就是对像素值进行了反转,也就是书中所讲的负片效果,对医学很有用。

技术分享g2图是将[0.5 0.75]间的像素线性变换到[0 1]之间,也就是进行了放大。那么这里有点疑问,我们的图像像素幅值区间不可能只是有[0.5 0.75],这个参数的意义到底是什么呢?我对书中的理解如下,上面图中所用到的是uint8类型图像,因此图像幅值区间是[0 255],有一点编程基础的都应该清楚。所以对应uint8类型,它的实际区间为[0.5 0.75]*255=[127.5  191.25]。如果是对应是uint16类型,那么他的实际区间为[0.5 0.75]*(2^16-1)=[32767 49151],也就是只取区间[32767 49151]像素幅值。再回到imadjust(f, [0.5 0.75], [0 1]),也就是将区间[127.5  191.25]映射到[0 255],怎么一个映射法呢?默认的就是线性对应,由两点(两个区间形成两点)确定一条直线。如下图所示:

技术分享

那么问题又来了,如果是区间[0.5 0.75]映射到[1 0]又是如何理解的呢,其实是一样的道理,做好点对点的对应关系,求出线性函数即可。如下图所示的对应关系,这也就解释了g1图效果的原因,从[0 1]映射到[1 0],就是斜率为-1,x取值范围为[0 255],完全就是一个线性明暗反转操作。

技术分享

Low_High=strechlim(f),就是帮我们找到图像f中的像素幅值的最大值和最小值,如果f是一个单值图像,那么Low_High就是一个行向量(1*2的矩阵),如果f是一个彩色图像,那么Low_High就是一个3*2的矩阵。当我们找到f图像的最小,最大像素幅值后,再将其映射到整个像素区间[0 1],也就是书中所讲,实现对比度拉伸,可以得到不错的效果。如下图,从A图到D图,D图就是使用了strechlim(f),然后使用D=imadjust(f,Low_High,[0 1]);得到的图像,很是清晰。

技术分享

书中的一个tofloat函数,很短,但写得很棒,我读了一下,并添加了一些自己的注释,代码如下。

 1 function [out, revertclass] = tofloat(in)
 2 %out=输入的图像参数(in)转化为float型数据点
 3 %revertclass=一个函数句柄可以将类型转回去
 4 
 5 identity = @(x) x;        %一个匿名函数的句柄,表示自身
 6 tosingle = @im2single;    %普通函数句柄 理解为函数指针也行
 7 tabel = {
 8         uint8,     tosingle,   @im2uint8
 9         uint16,    tosingle,   @im2uint16
10         int16,     tosingle,   @im2uint16
11         int16,     tosingle,   @logical
12         double,    identity,   identity
13         single,    identity,   identity
14 };
15 %在单元矩阵的第1列中找到输入参数类型的名字
16 classIndex = find(strcmp(class(in), tabel(:, 1)));
17 
18 if isempty(classIndex)
19     error(Unspported input image class.);
20 end
21 %在单元矩阵的第2列中找到索引处转为flaot型的函数句柄,进行转换
22 out = tabel{classIndex, 2}(in);
23 %在单元矩阵的第3列中找到索引处反转为原来类型函数句柄,进行转换
24 revertclass = tabel{classIndex, 3};

 

 

3、个人对书中一些知识的理解

 

心得总结

数字图像处理(MATLAB版)学习笔记(2)——第2章 灰度变换与空间滤波

标签:线性   jpg   entity   UI   9.png   使用   osi   pre   数字   

原文地址:http://www.cnblogs.com/endlesscoding/p/6681142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!