wiener法图像处理

2015-03-22 20:39:49 ispforfun 阅读数 11809

  维纳滤波器是一种自适应的滤波器,在数字信号处理中有着广泛的应用。ispforfun会在从今天开始定期给大家带来维纳滤波器在图像处理中应用。本节讲诉维纳滤波器在图像去噪中的简单应用。

       让我们从Matlab中的函数wiener2开始。Matlab的help中对wiener2的说明如下:

       wiener2估计图像中每个像素的局部均值和局部方差,


      其中,是图像A中每个像素的NXM邻域。维纳滤波器的去噪原理如下:


      其中是噪声的方差,如果没有给出来,那么会根据图像的局部方差进行估计。

     

     ispforfun根据这段原理,编写了如下的matlab代码,共享给大家。

function J = wiener_image_denoising_filter(I, Win, noise_var)
% J = wiener_image_denoising_filter(I, w)
% -----------------------------------------
% by: ispforfun
% I is the input image. Single channel image.
% Win is the window size for filtering.

[img_height, img_width] = size(I);
half_win_size = floor(Win/2.0);

[X, Y] = meshgrid(1:img_width, 1:img_height);
[dX, dY] = meshgrid(-half_win_size(2):half_win_size(2), -half_win_size(1):half_win_size(1));

dX = reshape(dX, [1 1 Win(1) Win(2)]);
dY = reshape(dY, [1 1 Win(1) Win(2)]);
X = repmat(X, [1 1 Win(1) Win(2)]) + repmat(dX, [img_height img_width 1 1]);
Y = repmat(Y, [1 1 Win(1) Win(2)]) + repmat(dY, [img_height img_width 1 1]);

X(X<1) = 2 - X(X<1);
X(X>img_width) = 2*img_width - X(X>img_width);
Y(Y<1) = 2 - Y(Y<1);
Y(Y>img_height) = 2*img_height - Y(Y>img_height);

patch = @(f)f(Y + (X-1)*img_height);

P = patch(I);

img_mean = local_image_mean(P);
img_var = local_image_var(P, img_mean, Win);

if nargin < 3
    estimated_noise_var = sum(sum(img_var))/(img_height * img_width);
else
    estimated_noise_var = noise_var;
end

gain = (estimated_noise_var == 0.0).*zeros(img_height, img_width) + ...
    (estimated_noise_var ~= 0.0).*((img_var - estimated_noise_var)./img_var);

J = img_mean + gain.*(double(I) - img_mean);

J = min(max(J, 0), 255);

J = uint8(J);

%gain = (img_var - estimated_noise_var)./img_var;



function img_mean = local_image_mean(P)
% img_mean = local_image_mean(P)

local_img_sum = sum(sum(double(P), 4), 3);
sum_size = size(P,3)*size(P,4);

img_mean = local_img_sum/sum_size;


function img_var = local_image_var(P, img_mean, Win)
% img_var = local_img_var(P, img_mean)

diff_img_patch = double(P) - repmat(img_mean, [1 1 Win(1) Win(2)]);
diff_img_patch_pow2 = diff_img_patch.^2;
local_diff_img_sum = sum(sum(double(diff_img_patch_pow2), 4), 3);
img_var = local_diff_img_sum/(Win(1)*Win(2) - 1);

实验如下,富含噪声的图像如下:


去噪后的图像如下:



       

2015-09-24 13:36:09 Real_Myth 阅读数 6902

from:http://visioncompute.readthedocs.org/en/latest/ImageProcess.html

盲源分离:

自然梯度法

自然梯度法主要是用接收信号的概率密度求梯度,最后为了鲁棒性,使用黎曼空间的表示。这说明这还是一个求导的概念。用g(y)表示接受信号的概率密度函数。这是一个估计的结果。

SOBI

这个方法我想和SVD分解差不多,只是使用了多个时延,改善和确保性能。

oblique projection

正交投影:PH=H*adjoint(H) 斜投影: PH=H*adjoint(S)

色调以及摄影的应用

眼睛总是被吸引到画面中最明亮的部分(差异最大的那分),例如白底黑主体就相反了。所以亮色调在视觉上优先。要充分利用光线,肤色,以及衣服的颜色的色调来突出主题。

例如深色的衣服有助于使人体与背景浑然一体,这样面部就会成为画面中最最显眼的部分,深色显的苗条,浅色增加分量,一般来说,衣服的颜色应该淡化,因为鲜艳的色彩会影响对面部的注意。 布光 ======

布光的原理最终是最终是颜色的设计,人像摄影主要是柔光. 柔光,冷光,䁔光,背景光,轮廓光,发型光,羽化光,光比

窗户光,最好的时候,上午中间,下午的中间时段. See also ========

  1. LCH,lab 只是不同的颜色模型,并且常见光线与颜色模型值,例如强度与功率等。
  2. Recovering highlights with dcraw using LCH blending
  3. 摄影用光 色温 色温中,绿色基本保持不变34%,我们通常指的色温调整主要改变是RB两个的百分比。三者靠近比例接近的时候就是白光也就是日光色温,日光的色温基本是5500k. 黑体色温与CIE的色温定义是有区别的。并且色温也是表征能量,而不是颜色的。不能表达所有颜色。
  4. brucelindbloom 关于颜色各种转换与在线工具
  5. Decoding raw digital photos in Linux
  6. 色彩与色调的调整 要慢慢来看懂这些理论了与实际的用途了
  7. 白平衡与直方图均衡化 这个到底是什么关系呢,是不是对应关系
  8. 直方图、对比度调节及白平衡 可以做一下这些实验在,GIMP或者python中
  9. 调色教程入门二——色彩基础,想学调色的必看 要看懂直方图的分布意义了
  10. 色温表

思考

Hue-Saturation

#. Y U V introduction – Main.GangweiLi - 12 Aug 2012

色阶曲线的应用 现在终于明白曲线坐标的意义了,X轴代表的是原来相素分布,Y代表输出的色采分布。曲线就是一个直接映射关系。 而原始分布是要根据直方图来看,或者直接去图片去测试区域。

– Main.GangweiLi - 20 Nov 2012

如何在实践应用 拿着相机,如何来控制颜色,来达到自己的目的呢。亮度的不同会产生什么,饱和度的会产生什么样的东西,色度的不同会产生什么。

– Main.GangweiLi - 02 Jan 2013

图像降噪

k-L 变换就是求数据的协方差矩阵的特征值和特征向量。

基于PCA的降噪,

PCA降噪方法和之前的降维差不多,对于降噪来说,就是获得信号子空间和噪声子空间,-》从噪声子空间中估计噪声方差-》remove 噪声子空间

小波变换

haar变换,就是利用上一个点对下一点进行相减,在信号不变的情况下,得到的信号就是稀疏的,稀疏之后然后在通过设置门限就可以把噪声抑制掉。

量子成像

相干斑

相干斑主要是相干成像中明暗变化的图像,产生主要是由于单个距离分辨单元中包含多个目标,结果多个信号相加生成随机的信号幅度和相位,主要抑制相干斑的方法

  1. 基于multi-looking processing, 但是这样会降低雷达的分辨力(好像是方位分辨率吧)
  2. 基于小波变换的方法。
  3. 基于ICA的方法。
  4. 基于自适应滤波的方法。
  5. k-L变换 清华
  6. k-L变换,里面还有一些基本的主分量分析,小波变换等的数学推导
  7. adesso Adessowiki - Collaborative Scientific Writing and Programming
  8. klt找到脸位置,matlab代码
  9. scikit-learn: machine learning in Python 有空看一下
  10. PCA降噪matlab代码
  11. PCA降噪python 代码 怎样装上他们开发的modulate
  12. 自适应变换小波降噪
  13. 多分辨率curvelet transform
  14. wavelet.py 图像小波降噪
  1. A beginner’s guide to speckle
  2. 合成孔径雷达基础
  3. 相干斑形成原理 这个基本还行,理解了相干斑
  4. Lee滤波,这个是python 版本的,但是这个看不太懂,让老李看下
  5. 量子力学

Hough 变换

线检测 图像空间——》参数空间,对图像中的任一点对应参数空间的直线(y =k*x+b),因此需要看任意多少点对于的直线相交于一点。实际中为解决y =c,k=inf的问题,使用 p =x*cos(theta)+y*sin(theta)

在p-theta中形成一个曲线。

参考:

  1. Hough变换原理 看一下,比较到位
  2. OpenCV-Python教程(9、使用霍夫变换检测直线)

视频压缩,就是在某个基上变换后得到比较简单的向量比如[1,0,0],得到更多的0,或者近似零,我想压缩感知也是这样的,值认为它是稀疏的,大部分都是零的,有一个基变换中,只取某几个。

Think also

直方图:

introduction

直方图特点:计算量比较小,直方图反映的是图像像素灰度值的概率分布,

原理:为了改善图像过亮或者过暗,得到图像的理想整体对比度(1/n),通过符合求导的逆推,得到要用积分图像。

优点:适用于图像过亮或者过暗,尤其对于X光图像中更好的骨骼结构

缺点:对处理的数据不加选择,它可能会增加背景杂讯的对比度并且降低有用信号的对比度。

matlab实现:histeq函数。

  1. RGB转灰度图的几种算法 RGB转换为灰度图完全是我们心理的作用.
  2. 50 RGB向灰度转换的原理 可以看一下

直方图本身反映了,各个灰阶的像素的数量,把一幅图像像素看成是一个小球,而像素的灰度看成小球的大小。而灰级就是256个大小从小到大排列的篮子。然后按照顺序把每一个像数按照大小放入合适的篮子里。每个篮子里小球的个数,再除以总数,这样就形成直方图。但是通过直方图发现,小图分布的不均匀。 那么如何算是均匀呢,当然是根据能力与出身了。例如篮子大小当做出身。也就是从小到大的顺序不能变,不管我有多少小球。但是我的灰度又要能体现数量的多少。数量越多,灰度级越大。能同时满足这两个要求。就是要利用概率密度了。这样的结果是首尾的值是不会变的。最小值还是最小值。最大值还是最大值。最小值再加上最小值与当值之间密度差值。

直方图拉伸和均衡 这里有一个直方图拉伸和均衡的关系,可以看到均衡是拉伸方法的特殊情况,另外可以看到因为增加了对比度,所以都会出现对比度增加的好处,但是这样的话,同时也可能把北京增加了,通过`图像增强1:对比度增强与直方图变换 <http://lijiwei19850620.blog.163.com/blog/static/97841538201210239635623/>`_ 看到,理想的曝光是一个中间高,两边低的灰度情况(这个是为什么还不清楚),大致和直方图均衡的图比较吻合了。

digraph{rankdir=LRnode [shape=box];From_picture_histogram->too_Dark->Right_stretchingFrom_picture_histogram->bright->Left_stretchingFrom_picture_histogram->"Low-contrast_mid-gray-level"->Left_right_stretching}

` OPenCV直方图均衡化 <http://blog.csdn.net/luomaojiang/article/details/8601321>`_ 这里两个图看很形象直观。但是观点是做的,那就是均衡化不会每个灰度级上都具有相同的象素点数过程。原来每一个篮子的小球的数量是不会改变的,会改变的,只是让原来篮子的大小,随着之进行改变。直方图维基定义 这里给出的定义,扩展常用的亮度。也就是概率最大的亮度之间的差值。

所以直方图均衡化只改变宽度,不改变形状。同时我们也指定均衡化的宽度。

ImageMagick

Introduction

imagemagick 是一个超强的库,并且指命令行接口异常的强大,基本上图片处理,画图功能它都已经提供了。可以说是一个cli版的GIMP。 同时它又像其他的linux工具一样,它的功能一种是在编译时通过各种宏来指定。另一种方式那就是采用配置文件。并且采用一定的搜索算法。最先开始在当前文件夹下.magick文件开始。从了一些正常的参数之外,还可以通过+define指定的那些隐性的参数。并且用identify 命令可以读取也可以添加各种的`元数据到图片中 <http://www.exif.org/>`_exiv2 同时还能够把这些元数据给strip掉,就像gcc的编译一样。每一个图片本身就是对象,我可以图像的统计信息放在元数据里,放在comments里,并且它支持一些通配符。简单的命令可以用convert,mogrify,display等,脚本可以使用`conjure <http://imagemagick.sourceforge.net/http/www/conjure.html#msl>`_ .%RED%而这个正是想要的一直准备去做的一件事之一。如何实现一个动态搜索接口。win7的文件浏览器功能就不错。自己是不是可以基于开源的文件浏览器改出来一个。%ENDCOLOR%其实imagemagick提供了一整套的命令行,包括管理显示排序方面关于图片的,问题自己如何利用这些。 #. 如何显示那文件属性 可以直接使用identify,convert来查看与编辑图片的属性。 #. best-free-digital-image-viewer.htm

计算存储图片两种方式一种是矢量图,它是由一些基本的图元组成,这些图元都是可以有基本数学方程。这样可以数学方程进行放大与缩小这个就是SVG它可以用XML等直接传递,只需要一些特征点。而opengl也采用的这种方式,不同的是采用有限元法来表示各种图形,但是在显示的时候,最终还是还要像素上光栅化的。这就像另一些图,直接就是利用点阵图来表示。opengl可以说这种方式的结合。 并且opengl顶点与最后屏幕点还是不一样的。先连线,然后逐行扫描的。

光栅化的后反矩齿。就是把中界点用半透明化。

color space management

一些美学原理是在以及各种颜色空间都在[[Study.ColorTransform]]。在这里只提到在计算机中,颜色的深度的问题,就是指你用几位来表示一种颜色。同时也还有一个采用量化的过程。其中之一多少个像素点代表真实的一个点。这个是采用率的问题,这个图放大与缩小的时候,会采用到,例如缩放时是直接按点踩,还是说几个点中取中值,还是如何。这个在opengl的光栅化时也同样有这样的问题,在光栅化之本身只有顶点数据的,内部的尺寸大小不同时与纹理的映射关系其实就是采样的过程。你可以指定取最大值,取最小值,或者采用滤波的方式来设置都是可以的。以及颜色本身减少压缩也是这样的。 文件本身存储的字节序的问题在这里都是可以指定所修改的。

并且imagemagick还支持批处理。 通过对imagemagick的学习,对于图像本质有了更深的认识。同时对于各种图片存储方式也有更深的认识。总之一点那就是矩阵式结构不变的。改变的一个像素点有多少个通道。每一个通道需要多少位来表示。所谓压缩不压缩也是指的这些。但是JPEG是如何达到压缩目的呢。是把点给扔了,把细节的地方点多一些。但是如何来保证像素数,扔掉的像素点是不是要拟合出来,并且还标记出来,哪些点是需要拟合的

在图像与图形的处理过程中两者有时候是不分的,在图像的处理过程中,像素的坐标位置提的不是很多,而在图形的像素点的颜色道是说的少了,更多的是顶点的坐标点。其实每一幅图像都有一个坐标系。要么以顶角为原点要么中心为原点。图像的变换都是这样来的。在建模的时候,就发现各个子系统都会自己的局部坐标系。那个gravity指的就是局部坐标系的原点在哪里。 在图形与图像的处理过程中,并且需要计算整副图像的统计值,然后以这些为初值,进行局部分形处理。一个点的坐标值,颜色值,法向值,切线值,都是很重要的。但是图像与图形的是有区别的,图像的法向以切线是估出来的。而图形则是经过建模精确计算出来的。

对于各种图形都支持一种interlaced 的属性,那就是可以边下载边显示。是文件本身的一种属性,还是某一种图片格式的属性。

图片的显示管理

ImageMagick提供import进行截屏操作。montage,display,animate批量化的显示,动画的显示与修改.同时进行格式的转化,动画frame的控制 insert/swap/delete/delay/loop,并且能够直接操作.gif中frame.修改顺序。并且还能折分与提取与合成pdf,还能用来破解pdf.。 做和种可视化对比的利用montage 是非常方便的。根据结果生成各种各样对比图片数据。 并且在XWindows中,display可以指定的显示在哪一个窗口,并且还可以设为哪一个窗口的背景,并且还能实时监控图片的变化,vimdot就是这样实现的。但是如指定缩放呢。还是使用montage的方法。

各种动化教程 http://www.imagemagick.org/Usage/anim_basics/ 我的ImageMagick使用心得 使用ImageMagic开发一个照片管理库

图形的变换

compare 比较做的还是比较智能的,直接支持单通道的比较,而不需要先分离然后再比较。并且对于各种特效的变换。例如watermark 添加以及签名以及边框的添加都是高度可定制化与批量化的。另一个那就是图片的隐藏,实现的原理是什么呢,直接进行图片叠加算法,还是只在后面又加了一帧。应该不是又加了不是这种,应该是算法叠加。Steganography composite -stegano 直接转化为噪声隐藏位图的低位。然后再恢复按照固定的函数算法再恢复出来。但是这种方法也会受到图片的裁减的破坏。 是不是可以直接把ASCII码当灰度或者unicode码当做灰度值,然后把文字变成图像,同时也研究一个那个小鸭子是如何实现的。

图片的噪声,有各种各样的模型,如何进行添加与去除。这个是图像复原的一个题目。椒盐噪声与高斯噪声的原理 对于椒盐噪声,为什么非得是极值。在进行模板设计的时候一般都采用奇数矩阵来代替圆形。

高斯函数 高斯函数三个参数,均值,方差,还有一个幅度,均值是由谁得出,而方差为什么是指定的。高斯一般用5x5模板 图像真实对比,用小图来进行对比,这样的实现会很有意义 把颜色与看数值直接相结合会更有直接意义,这个方法不错,直接看其灰度值的变化。            
` hmm-kalman-particle-filtering <http://freemind.pluskid.org/machine-learning/hmm-kalman-particle-filtering/>`_              
-segment 这个只是从直方图进行分割。            
-shade的 光线效果。对于光线的效果是需要三维的,并且需要法向的,二维图像的法向如何进行计算呢。            
-Solarize ` 曝晒算法 <http://courses.washington.edu/hypertxt/cgi-bin/book/pmontage/solarized.html>`_ 模仿最初沥清制图的方法,采用V字型反转就可以了对于曲线或者直方图            
-spread 算法,在一个有限的范围内随机跳,采取什么样的随机会不同的效果吗,总体看来在水波下情形            
-sharpen 虽然都是高斯,取高通,还是低通,就看你用哪一部分,你是用3sigma之内就是低通,3sigma之外就是高通了            
-Swirl 旋涡效果            
-threshold -level -modulate
-tint 这其实也是图像分割的一种 最简单的应用,在过滤的时候会非常的方便 threashold用的最大值,level用的最小值,其实就是直方图的输出 -tint 是调整各个分量的多少 -modulate 用的是HSV模型,而前面两个用的是RGB模型    
-unsharp 去除模糊,其实锐化的工具            
-wave 要么横向,要么纵向,能不能径向            
-virtual pixel 是不是利用多点来表示一点,具体还不太明白            
roll 自身左右循环移位与上下循环移位            
-append 就像字符串拼接一样,把图片接在一起 自动去改文件头 并且能够指定边框,背景        
-average -fatten 把多张图,叠加起,点对点按照不同的规则,就像两张的加减一样          
-affinite 二维的变换矩阵,但是一个问题,那就是坐标原点在哪里            

画图

颜色格式可以直接使用名子例如red,black,等也可以使用HTML#XXXXXX格式,也可以使用RGB格式。 画图可以指定大小,xc(xwindow colors),以及背景,方向,以及各种基本的图形,以及填充,边框等,并且能够多次嵌套。

-annotate 添加注注释    
-pointsize 字体大小    
-stroke 线条颜色    
-fill      
-font      
-draw color 50 50 point/replace/foodfill  
^ rectangle    
^ circle    
^ text    
^ Image in/over/out/atop    
composite
-compose 合成图片
   
-write 可以保存每一步的中间状态    

display 命令的用法可以按照slide来播放

Imagemagick中图片大小转换全攻略

  1. Table of Contents for Writing With Images

图像量化

像素是离散化后的强度值。 512*512 是什么?

饱和就是我们不能同时看到超过范围的图像。饱和和人眼的原理是一样的。

离散化的精度影响 分辨率。floor(value/2)*2, 这里的2就是下采样系数。

图像表示:

introduction

如何表示一个图像,用点阵,用矢量。如何一幅图像中找到对应的矢量描述呢。解决了描述问题了,后面就成了一个通用的数学问题。

是不是可以用分形的去描述一个图像呢,把分形当做一个基,然后合成图片上内容。目前还没有找到一个完美的表示方法,对于每一种特定类型图像对象,我们总是能找到一分类方法的进行分类表示的。

链码

按照一定的次序连接边界线。这个与模型的建模表示有什么区别。 多边形近似 | 最小周长多边形,聚合与拆分 能不不能分形来表示呢 |

标记图 ,每一个子图都有自己的中心原点,对于物理图形来说,一般用重心来做原点 , 边界线段 , 骨架 , 形状数,例如欧拉拓扑公式, 复数序列的傅里叶变换来表示。, 统计矩 , 拓扑学 ,

主分量法 ,其实就是特征值与特征向量的方法 ,

关系描述 ,也就相当于PCM差分编码的方法 ,

See also

图像恢复 (降噪)

G=F*H+N 还是G=H(F+N) 还是只有N,还是只有H,处理方法都是不样的。主要需要考虑的因素有 #. N是不是可分离的 #. H 是不是可以逆的,一个是指数学上,一个是指实践的处理对象上。 #.

只有 G=F+N 并且N在唯一空间的,或者N的频谱明显与原图的频谱有距离,这一种是最简单的,只需要简单的高通,低通,带通,在二维还有多带通。 例如常规的,中值,均值,最大值,最小值,另外掩码的尺寸也是重要的因素在处理效果上  

用直方图来做参考太粗糙了,用等高图会更高直观,亮度变成高度,会加直观。并且会带有位置信息。 噪声的估计 #. 其中一种是基于直方图对澡声进行估计,利用基准图像来进行测试的。 #. 还有一种那就是根据傅里变换来进行估计的。 #. 另一种是直接从传感器的技术说明中得知。 最终值,可以基本值来进行测试,例如灰卡拍照进行测试。来得到澡声的图像。例如黑夜,我们一张白纸后面打光进行拍照,得到图片就为澡声了。

退化函数 #. 图像观察估计法 #. 试验估计法。 #. 模型估计法。 同态滤波就属于这种。 建立各种模型来估计退化函数。同样是可以基准图像来进行测试的。 对于张各的图像没有做离里叶变换。做一个傅里变换看看。

噪声产生原因 高斯噪声源于电子电路噪声和低照明度或高温带来的传感器噪声。

椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声往往由图像切割引起。

加性噪声-》均值滤波方法就好,对于椒盐噪声运用中值滤波,实际中对于复杂噪声,运用阿尔法滤波结合中值滤波和均值滤波,效果更好,而对于周期性噪声(比如电力电子中),则使用带阻滤波器。 对于只有f=g+n 的模型,就是直接之前的滤波器,把n踢掉。自适应的原理无非就是需要全局的期望与方差。

几何变换,其实可以完全通过图形的方法来实现。 最小二乘算法 (least square) =================================

对于函数y =ax, for x是输入图像,a是退化函数,y是输出。 输入w(0)值(近似a的逆运算),得到:

x(0)=w(0)y,
augy=(yy)(1)y;

最小二乘,使残差最小

w(1) = aug_y*y

err=y(eye(10)yw(i));

直到 w(i),i=1,N小于某个数量级,比如 rn<10e6, 停止迭代。 否则更新w

关于运动模糊的物理

可以根据运动方程来建立模型,然后进行恢复,例如水平运动的基础是运动的距离可以由傅里叶变换的周期性来检测。并且第一旁瓣宽度的关系。图像变换的周期是与物体运动的周期或者对称是相关的。还有那是旋转后的出现的模糊。并且这个要一下实验。水平运动可不可以x,y都有,或者经过旋转到一个方向在进行。 包括水滴消除也是这样进行的。对于车牌检测的就是直接使用逆滤波的结论并且还做了简化,原来的两个方向的,其中做了进一步分析(ua+vb)这个值是多少,它本身就是一个Sar函数相于平移了。

维纳滤波

wiener filtering是相对于 inverse filtering 和smooth filtering 的一个折中,目标函数 [ŝ s]2 最小,最后得出信号的系数(相对于噪声的系数),也就是要知道信号和噪声的方差。但是实际中这个怎样给出?但是并不是wiener filtering 对所有的 退化图像和噪声都有用, 我想还是根据不同的模型,设计不同的方法,学会建模,并且利用数学方程求解。无非就是就极值的问题。

傅里叶变换

傅里叶变换就是用一些正交基描述一个信号或者一个图像,

图像复原小结

问题:从噪声和退化函数中估计原始图像。

对于噪声,可以用低通滤波器,但是这样通常会造成图像的损失,也就是噪声和细节是一对矛盾,

维纳滤波主要解决噪声的问题,对于退化函数,通常是有一定的先验知识。

傅里叶变换应用:对于特定小点,可以通过傅里叶变换来比较。比如眼睛。纹理分类。

  1. Multi-dimensional image processing 里面有专门的各种滤波器
  2. noise 1.2.1 python噪声包
  3. scipy.signal.wiener scipy和numpy的参考文档
  4. Wiener Filtering matlab 程序
  5. Wiener Filtering推导
  6. 简单的同态滤波(matlab)
  7. 同态滤波(Homomorphic filtering)
  8. 雨滴去除 来这做一下这样的效果。
  9. Wiener Filtering 应该比较详细,看一下
  10. 穿墙雷达 超宽带波藉由墙壁反弹的方式?及高性能的处理器而找到障碍物。可判读出在极短时间内的变化产生轻微的动作

图像分割

点检测

点检测一个点的检测,还是一个块检测。点检测简单只要取一个阈值,就例如利用均值,或者别的得到距离值,然后利用这个距离值来进行判断,块检测就要求是一个范围,也首先是连通性的检测。

对于块的检测可以用形态学的方法,但是要就考虑块的大小的问题。可以把那些孤立点消除。

线检测

分为在直线,可以用霍夫变换,一般是先通过边界检测,然后再做这些,边界检测可以用一阶或者二阶来做。一阶来解决是不是在边界上,二阶解决在哪些的问题。这里可以用Canny算子。

  1. 计算图像的梯度并对其设置门限得到一幅二值图像。
  2. 在参数平面内确定再细分。
  3. 对像素高度集中的地方检验其累加器的单元的数目。
  4. 检验选择的单元中像素之间的关系。

从整体看,还可以其上颜色值,当做其他值,例如把切成列表下一个坐标。一个RGBA如果是整型的,可以就四个字节,我们四个字节可以存储各种有效的结构信息,把这个原始图像变成一个度量图像,我们可以把关于一个点的各种信息都压缩在另一幅图像中。 可以利用图形的各种知识来进行操作。

图像分割——分水岭算法

区域的生长,分割与合并 分水岭算法,通过通过判定一个区域的中值作为分水区域,对图像进行分割,算子有一阶算子,二阶算子。等等

边界检测可以用过零来检测边界。 边界的连接问题,例如知道了边缘检测的图形之后,我们在模型本身的特点,来确定模板的大小,其实也就是其领域的大小,然后确定周值与这个中心的点关系。然后在这个领域内再计算某些点的特性(例如梯度)与中心点的特性的关系。来决定。 例如大梯度的大小与方向都在一定的范围内就连接起来。当然T值也是自动产生的。

  1. OpenCV-Python教程(9、使用霍夫变换检测直线) 检测中线段,试一下

分割分为点线面,检测。检测变换后就变成了基本变成二值图像。只为只有这样容易区分背影与对象本身。就是背景就相当于集合的全集,而子集就相当于对象本身。就要用到一个门限,但是门限分二种,一种是局部动态计算,另外一种是全局的。对于结构简单的图像全局,对于复杂图形用局部分的比较好。

区域的分割,如何知道每个点是属于哪一个区域呢,还是对每一个点对于tag标记呢。 并且区域分割。利用四叉树或者二叉树对区域进行分割。这个就要自定义存储结构了。为什么现在自己经常纠结于存储结构呢。直接链表。就搞定了。

+`图像分割之(二)Graph Cut(图割) <http://blog.csdn.net/zouxy09/article/details/8532111>`_

他通过约束边界项和区域项来达到通过能力最小值约束:

E(L)=αR(L)+B(L)

其中区域项通过约束概率最大来实现:

Rp(1)=lnPr(Ip|"obj")
Rp(0)=lnPr(Ip|"bkg")

边界项通过约束两个不相似的程度来实现:

B(L)=p,qNB<p,q>δ(lp,lq)

-+`grab-cut < 图像分割之(三)从Graph Cut到Grab Cut>`_

D(x)=i=1Kπigi(x;μ,Σi),i=1Kπi=1and0πi1

其中:

g(x;μ,Sigma)=1((2π)dSigma|)exp[12(xμ)TSigma(1)(xμ)]

通过对初始选定的初始值来作为估计高斯混合模型中几个参数,得到这些参数后,对于这些点就可以进行判断是目标还是背景的概率了, 然后是差异性比较:

V(α,z)=γ(m,n)C[anam]expβ||zmzn||2

graph cut 缺点:

算法是利用的物理学中粒子的原理,要对每一个像素点进行计算,计算比较耗时.

图像拼接

Lucas–Kanade 方法

图像拼接最重要的是在找到匹配对之后,求转换矩阵。L-K算法通过目标函数是 .. math:: {sumlimits_{{rm{patch}}} {left[ {Ileft( {Wleft( {X;p} right)} right) - Tleft( x right)} right]} ^2},通过对次公式进行泰勒展开, 并对信号进行求进行链式求导:

Ip=IWWp=I,[WxpWyp]

最后用最小二乘算法实现对p的估计。

See also

  1. 一种基于区域匹配的图像拼接算法
  2. 图像拼接算法及实现 拼接算法主要两类一类是分域匹配,另一个基于特征提取
  3. 图像拼接Image Mosaic 北京联高软件开发有限公司

图像处理

digraph structs {rankdir=LRnode [shape=record];struct1 [shape=record,label="samplinng | digitialized| Image_transform|enhancement| compression |restoration |segment|analysis| Binary \n image \n processing"];}

图像处理流程

digraph structs {rankdir=LRnode [shape=record];struct1 [shape=record,label="Image_Search"];struct2 [shape=record,label="Color|texture|shape"];struct1->struct2}

思考

现在明白了,学习金融,利率是根本,所有的变化都是基于这个的,

– Main.GangweiLi - 16 Jun 2012

平滑空间滤波器

特定滤波器(fspecial):选择里面的平均滤波器
一般多维滤波器(imfilter)作用:对感兴趣的物体得到一个粗略的描述而模糊小物体,较大物体变得像斑点而易于检测(为什么便于检测?)。

空间滤波器带来降噪的同时,也会产生图像模糊。

中值滤波器 (medfilt2):降噪。

从空间滤波其中看到,blur使得图像最模糊,然后contour和FIND_EDGES中间正,两边负,可以得到图像的轮廓, SMOOTH和SMOOTH_MORE平滑的越多图像越模糊。SHARPEN可以通过中间正,两边负的,得到图片增强。

图像逻辑运算(减法)

在matlab中图像是通过极坐标实现的,现在目前基于smile.jpg的结果是,从小到大变化图像半径和旋转角度, 半径 小->大,呈现图像的顺序嘴巴——》眼睛-》脸庞-》腮红。 这个出来的先后顺序是和这些边缘变化的模糊度有关,模糊度越高,出来的越慢。

旋转的作用那,现在看起来不是很明显。

空间滤波实现滤波 和目标分割 (基本原理:积分用来模糊图像,微分用来锐化图像)

空域滤波,点检测,线检测

一阶算子方法:和可以实现对于明显的图像实现找到边界, Sobel算子:内部利用局部平均方法,对噪声有一定的抑制作用。

Roberts算子: 检测边缘,对噪声敏感。(实际中使用什么检测特性还不清楚)

Prewitt算子: 采用局部平均,对噪声有一定的抑制作用。

二阶算子方法:能够更加清楚的找到边界,但是二阶算子对噪声比较敏感,因此首先的方法是首先进行平均降噪。

Laplace 算子: 具有各项同性微分算子,具有`旋转不变性 <http://www.narutoacm.com/archives/laplace-rotation-invariant/>`_ :

Laplace(f)=2fx2+2fy2

空域滤波,点检测,线检测。

频域滤波

DFT就像一个[[http://wenku.baidu.com/view/014797737fd5360cba1adbed.html[数学显微镜]] 频域滤波最终也要转换为空域处理。 #. 一个不错介绍

频域图能看出来什么,二维的频谱图与一维的有什么区别。从图像的频谱中能看到什么。变换前后的坐标与图有什么对应关系。进行卷积,进行子图识别,卷积最大的那个值,那就是图像重合的中心位置。时域的卷积等于频域的相乘。能否找到相关性最大的那个值。子图的搜索也是基于此相关与卷积的 . 这个时候先计算好两处图处DFT图,另外一个功能那就类似于积分图像的应用。

频域变化之后,的图像应该是三维的Sa函数。通过三维的高度来看比二维的颜色更加直观。并且可以取任意的细节利用带组,根据频域图的三维高度分度来进行提取。但是一个前提那就是你要知道图像中谁在哪一段频域上占着。想成一个三维的图,但是频域分布是圆周型,中心最低,越往边越高。就像水波纹一样。颜色越高说明系数越大。成分比较越大。并且频域与空域的点与点的距离是有对应的关系。

各种滤波器的设计,高通,低通,带通,完全可以利用图像来实现。频域的矩形滤波直接用阈值图像就可以搞定。渐变的频域图就像是曲线滤波了,例如巴特沃斯滤波器。等等。用在频域上试一试。那些数字滤器例如汉宁窗等等哪些能用到图像上。

一切都通了,频域的原点经过shift变在中间(M/2,N/2)。截止频率距离中间的距离,至于中间渐变颜色是根据滤波器来的,例如高斯。截止频率就是方差的大小。那期望如何来定呢。还是说只能是中心点的值。 现在要看看GIMP的渐变是如何实现,轴像与径向。是不是利用极坐标。然后按照函数值进赋值。

对于相关性与卷积,并且利用同样大小频域图来进行相乘。有一个周期截断的问题,那就需要扩展与截图了。

对于推导无非那些矩阵与求导的一些符号运算。积分,微分,卷积。矩阵的逆变换等等。这些基本知识。 #. numpy.fft.fft2 这个库里一维,二维,多维,同时还可以提到一个序列采用频率。同时还有hfft,因为如果是纯实信号的FFT就是`hermitian transorm <http://en.wikipedia.org/wiki/Hermitian_function>`_ ,也是酉变换,也是正交变换。经过酉变换之后就都会变成对角阵。 在离散信号下的采用,其实我们平时序列的产生就是一种采样,例如,np.arange, np.linspace,np.logspace等等,包括你对序列直接进行的运算。所有对于序列的操作都可以看做是一种采样与滤波。 #. 斯坦福大学公开课:傅里叶变换及其应用 #. 图像的傅立叶变换 傅里叶变换的形式。

  1. fftw3-dev GPL 库,并且支持 ARM NEON,作为以后移植方便。并且[[http://gfourier.sourceforge.net/ fftw 可以直接用到GIMP GFourier]]
  1. GIIMP PIL
  2. 同态滤波论文去试一试
  3. 图像渐变算法及实现

Thinking

拉普拉斯算子二阶导数增强细节,sobel算子边缘。

一阶微分与二阶微分 http://blog.csdn.net/kayv/article/details/2261540
1. 斜坡面上,一阶微分一直不为0 ;二阶微分只有终点和起点不为0 1. 一阶微分产生较粗的边缘,二阶微分则细得多 1. 一阶微分处理一般对灰度阶梯有较强的响应;二阶微分处理细节有较强的响应

对于小图像用mask不合适,因为会有模糊,那用什么方法合适那?mask尺寸和物体尺寸的关系。

怎样实现调用C代码?

C:快盘graphicpaper1673-2944(2012)03-0022-05.pdf 基于DFT压缩。

如果我在较暗的情况下整体加上一个数的话,图像图像整体变量了,但还是对比度不高,

python 中怎样plt.axes 怎样调节参数

雷达数据 到成像 过程

– Main.GegeZhang - 27 Jul 2013

雷达散射特性,前向散射,后向散射?什么联系,为什么在机场的时候前向比较明显,前向散射是比后向散射明显。

雷达RCS曲线 中可以看出来机头,机尾 和两边机翼都比较明显

*对一维到二维一直推广,其实是假定了,图像线性时不变系统。所以先算行或者例都是没有关系。这是由于线性系统自身性质决定的。

2018-06-18 21:42:30 qq_41174320 阅读数 6553

一、图像处理预备知识

1、图像处理(image processing)

用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。图像处理一般指数字图像处理。

在计算机中,按照颜色和灰度的多少可以将图像分为二值图像、灰度图像、索引图像和真彩色RGB图像四种基本类型。

2、图像处理常用方法

 

1)图像变换

为了用正交函数或正交矩阵表示图像而对原图像所作的二维线性可逆变换。一般称原始图像为空间域图像,称变换后的图像为转换域图像,转换域图像可反变换为空间域图像。

它可以分为四个部分:空域变换等维度算法,空域变换变维度算法,值域变换等维度算法和值域变换变维度算法。其中空域变换主要指图像在几何上的变换,而值域变换主要指图像在像素值上的变换。等维度变换是在相同的维度空间中,而变维度变换是在不同的维度空间中,例如二维到三维,灰度空间到彩色空间。

常用的有三种变换方法:傅里叶变换、沃尔什-阿达玛变换、离散卡夫纳-勒维变换。这里只讲傅里叶变换。

2)图像增强和复原

 

图像增强不增加图片信息,只对感兴趣的特征进行强调突出,增加辨别能力。根据人的主观评定,具有一定的人为畸变。一般通过空间域处理和频率域处理两种方法。

图像复原技术的主要目的是以预先确定的目标来改善因散焦、像物相对运动、成像器材的图固有缺陷和外部干扰导致退化的图像。

图像增强和复原的目的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。图像增强主要是一个主观过程,而图像复原则大部分是一个客观的过程。

 

3)图像压缩

图像压缩是一种减少描绘一幅图像所需数据量的技术和科学,它是数字图像处理领域中最有用和商业上最成功的技术之一。

 

图像压缩既可以是无损压缩,没有信息损失;也可以是有损压缩,不能通过解压恢复原图,牺牲准确度换来压缩能力的增加。

4)图像分割

图像分割是数字图像处理中的关键技术之一。分割将图像细分为构成它的子区域或物体。细分程度取决于要解决的问题。即将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。

5)图像描述

图像描述是图像识别和理解的必要前提。作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法。

6)图像识别

图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类。

二、MATLAB简介

MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

Matlab是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。

三、MATLAB图像处理代码

1、图像读取及保存

MATLAB的基本数据单位是矩阵,一幅图像可定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,而在任何一对空间坐标(x,y)处的幅值f称为图像在该点处的强度或灰度。当x,y和灰度值f是有限的离散数值时,我们称该图像为数字图像。在MATLAB中,数字图像就是一个个矩阵。

1)图像读取

 

函数:imread(‘图像文件’) :读入指定的图像文件到内存

举例:

InImg=imread('d:\photo\yng.jpg'); %读取D盘photo文件夹中命名为yng的.jpg格式的图像存储到InImg矩阵中

2)图像保存

函数:imwrite(OutImg, ‘图像文件’):输出内存中图像数据到文件

举例:

imwrite(OutImg,'d:\photo\yn_ln.jpg'); %将OutImg矩阵表示的图像存储到电脑D盘photo文件夹中,并命名为yn_ln的.jpg格式的图像。

3)图像显示

 

 

函数:imshow(ImgData) :将图像文件显示到屏幕
subplot(行数,列数,区域索引); 

举例:

 

subplot(1,1,1);imshow(InImg); %将InImg图像文件显示到屏幕上指定位置

4)图像转换

 

I=rgb2gray(rgbImg): 将彩色图像转换为灰度图像,rgbImg为彩色图像
bw=im2bw(Img,level): 将灰度图像转换为二值图像,Img为灰度图像,level为0~1的灰度级阈值;

原图

灰度图像                                                         二值图像

2、图像增强

1)数字图像灰度增强

 

 

J=imadjust(I,[low high], [bottom top],gamma): 对灰度图像进行直接灰度变换;I为增强前灰度图像,J为增强后的灰度图像,[low high]增强前灰度级范围,[bottom top]增强后灰度级范围

举例:

clear;
InImg=imread('d:\photo\yng.jpg');
I=rgb2gray(InImg);
bw1=im2bw(I,0.8);
J=imadjust(I,[0.1 0.6], [0 1],0.5);
bw2=im2bw(J,0.8);
bw2=medfilt2(bw2);
subplot(1,2,1);imshow(bw1);
subplot(1,2,2);imshow(bw2);

增强前                                                                                              增强后

2)数字图像空域滤波

S=medfilt2(J): 对图像进行中值滤波
举例:

M=0;V=0.01;
J1=imnoise(I, 'gaussian',M,V);
S=medfilt2(J1);
subplot(1, 2, 1); imshow(J1);
subplot(1, 2, 2); imshow(S);

高斯噪声                                                                                        中值滤波

3)数字图像频域滤波

 

 

F=fft2(I): 2D 傅里叶正变换

Pha=angle(F): 计算相位谱

R= abs(F): 计算功率谱
F1=real(F): 获得傅里叶变换实部分量
F2=imag(F): 获得傅里叶变换虚部分量
fftshift(F): 移动傅里叶频谱中心至零频率

I=ifft2(F): 2D 傅里叶逆变换

举例:(1)

I=BWBand(21,31);
F=fft2(I);                        %傅里叶正变换
F=fftshift(F);
L=abs(F);
L= mat2gray(L);
I3=imrotate(BWBand(21, 31),30);
F3=fft2(I3);
F3=fftshift(F3);
L3=abs(F3);
L3= mat2gray(L3);
subplot(141); imshow(I);
title('原图');
subplot(142); imshow(I3);
title('旋转30度图');
subplot(143); imshow(L); 
title('功率谱图');
subplot(144); imshow(L3);

title('旋转30度功率谱图');

 

 

(2)
InImg=imread('d:\photo\ying.jpg');
subplot(2, 2, 1); imshow(InImg); 
title('原彩色图');
I=rgb2gray(InImg);
J1=imnoise(I, 'salt & pepper',0.01);
subplot(2, 2, 2); imshow(J1); 
title('椒盐噪声污染图');
[f1, f2]=freqspace([199 200],'meshgrid');        %产生等间隔采样的频率响应
R=sqrt(f1.^2+ f2.^2);                   %计算功率谱
Hd=ones([199 200]);
Hd(R>0.5)=0;                                   %产生理想的带通滤波器,频率带宽[0.1 0.5]
win= fspecial('gaussian',[199 200],2); %采用高斯函数生成同样大小的窗函数
win= win./max(win(:));                       %窗口函数归一化
H=fwind2(Hd,win);                           %利用窗口函数产生实际的带通滤波器 
subplot(2, 2, 3); freqz2(H);
ff= imfilter (J1,H);
subplot(2, 2, 4); imshow(ff); 

3、图像复原

 

 

图像滤波:
J = WIENER2(I,[M N]): 对灰度图像实施维纳自适应滤波 ,[M N]像素领域大小

C=conv2(A,B) : 计算矩阵 A B 的卷积

举例:

InImg=imread('d:\photo\yng.jpg');
I=rgb2gray(InImg);
J1=imnoise(I, 'gaussian');
B1=[0 0.2 0;0.2 0.2 0.2; 0 0.2 0];   %平滑滤波器
H = fspecial('average',[5 5]);
Blurred1 = imfilter (J1,H);
H = fspecial('gaussian',[5 5]);
Blurred2 = imfilter (J1,H);
K = wiener2(J1,[5 5]);
subplot(1, 5, 1); imshow(J1) ; %显示噪声图像
title('高斯噪声图像');
subplot(1, 5, 2); imshow(Blurred1) ; %显示均值滤波图像
title('均值滤波图像');
subplot(1, 5, 3); imshow(Blurred2) ; % 显示高斯滤波图像
title('高斯滤波图像');
subplot(1, 5, 4); imshow(K);% 显示维纳滤波器滤波图像
title('维纳滤波器滤波图像');
C1=conv2(J1,B1, 'same'); %对加噪后的图像平滑滤波
C1=mat2gray(C1); %将矩阵转换为灰度图像
subplot(1, 5, 5); imshow(C1);% 显示平滑图像
title('平滑图像');

4、图像压缩

 

 

哈夫曼编码:无损压缩

步骤:1)缩减信源 2)尽可能少的调动信源符号排序 3)规定大概率事件编码

 clear 
 close all;  %定义HufData/Len为全局变量的结构体 
 global HufData; 
 global Len;  
 disp('计算机正在准备输出霍夫曼编码结果,请耐心等待……'); %原始码字的灰度 
a=imread('d:/photo/hua.jpg'); 
a=rgb2gray(a);
 figure; 
 subplot(1,2,1); imshow(a);
 %取消坐标轴和边框 
 axis off 
 box off  
 title('Tokyo Towers','fontsize',13); 
 subplot(1,2,2); 
 axis off 
 box off 
 imhist(a);  
 title('图像灰度直方图','fontsize',13);%图像的灰度统计 
 GrayStatistics=imhist(a); 
 GrayStatistics=GrayStatistics'; 
GrayRatioo=GrayStatistics/sum(GrayStatistics); 
GrayRatioNO=find(GrayRatioo~=0);
GrayRatioyes=find(GrayRatioo==0);
Len=length(GrayRatioNO);  %初始化灰度集,防止系统随即赋予其垃圾值 
GrayRatio=ones(1,Len); 
for i=1:Len  
    GrayRatio(i)=GrayRatioo(i);  
end
GrayRatio=abs(sort(-GrayRatio)); 
for i=1:Len  
    HufData(i).value=GrayRatio(i); %将图像灰度概率赋予结构体 
end  % 霍夫曼编码/霍夫曼编码 


HuffmanCode(Len); %输出码字 
lavg1=0;
for i=1:Len  
    tmpData=HufData(i).code
    str='';  
    for j=1:length(tmpData) ; 
         str=strcat(str,num2str(tmpData(j))); 
         disp(strcat('a','= ',str)); 
    end
       len1=length(tmpData) ;
       lavg1=lavg1+GrayRatio(1,i)*len1;
        
end
ratio_delet=8/lavg1;
 str='';
 str=strcat(str,num2str(ratio_delet)); 

 disp(strcat('压缩率','= ',str)) 

5、图像分割(边缘提取)

1)图像几何纠正、边缘检测 

 

B=imresize(A,m,type): 图像大小调整

B=imrotate(A,angle,method): 图像旋转调整

最近邻插值法:将变换后的图像中的原像素点最邻近像素的灰度值赋给原像素点的方法
双线性插值法:
核心思想是在两个方向分别进行一次线性插值。

举例:

InImg=imread('d:\photo\tail.bmp');
I=rgb2gray(InImg);
B1=imresize(I,1.5, 'nearest');
B2=imresize(I,1.5, 'bilinear');
C1= imrotate (I,45, 'nearest');
C2= imrotate (I,45, 'bilinear');
subplot(231);imshow(I) ;%显示原始图像于
title('原始图像');
subplot(232); imshow(B1) ;%显示调整图像(最近邻插值)
title('最近邻插值图像');
subplot(233); imshow(B2) ;% 显示调整图像(双线性插值)
title('双线性插值图像');
subplot(234); imshow(C1);% 显示旋转图像(最近邻插值)
title('旋转最近邻插值图像');
subplot(235); imshow(C2);% 显示旋转图像(双线性插值)
title('旋转双线性插值');

2)边缘提取

 

 

BW=edge(I,method,thresh): 检测灰度图像的边缘

 

 

 

举例:

InImg=imread('d:\photo\ying.jpg');
I=rgb2gray(InImg);
BW1= edge (I, 'sobel',0.1);%sobel边缘检测器
BW2= edge (I, 'prewitt',0.1);%prewitt边缘检测器
BW3= edge (I, 'roberts',0.1);%roberts边缘检测器
BW4= edge (I, 'log',0.01,2.0);%log边缘检测器
subplot(221); imshow(BW1) ;% 显示边缘图像
title('sobel边缘图像');
subplot(222); imshow(BW2) ;%显示边缘图像
title('prewitt边缘图像');
subplot(223); imshow(BW3) ;% 显示边缘图像
title('roberts边缘图像');
subplot(224); imshow(BW4) ;% 显示边缘图像
title('log边缘图像');

 

 

 

边缘提取

 

 

2016-03-03 14:39:15 EbowTang 阅读数 11534
作者:mimi

图像的变换 

① fft2:fft2函数用于数字图像的二维傅立叶变换,如:i=imread('104_8.tif');

j=fft2(i);

②ifft2::ifft2函数用于数字图像的二维傅立叶反变换,如:

 i=imread('104_8.tif');

 j=fft2(i);

 k=ifft2(j);


噪声生成函数

① imnoise:用于对图像生成模拟噪声,如:

 i=imread('104_8.tif');

 j=imnoise(i,'gaussian',0,0.02);%模拟高斯噪声


定义滤波器

② fspecial:用于产生预定义滤波器,如:

h=fspecial('sobel');%sobel水平边缘增强滤波器

h=fspecial('gaussian');%高斯低通滤波器

h=fspecial('laplacian');%拉普拉斯滤波器

h=fspecial('log');%高斯拉普拉斯(LoG)滤波器

h=fspecial('average');%均值滤波器

 

图像的增强

①直方图:imhist函数用于数字图像的直方图显示,如:

i=imread('104_8.tif');

imhist(i);

②直方图均化:histeq函数用于数字图像的直方图均化,如:

i=imread('104_8.tif');

j=histeq(i);

③对比度调整:imadjust函数用于数字图像的对比度调整,如:i=imread('104_8.tif');

j=imadjust(i,[0.3,0.7],[]);

④对数变换:log函数用于数字图像的对数变换,如:

i=imread('104_8.tif');

j=double(i);

k=log(j);

⑤基于卷积的图像滤波函数:filter2函数用于图像滤波,如:i=imread('104_8.tif');

h=[1,2,1;0,0,0;-1,-2,-1];

j=filter2(h,i);

⑥线性滤波:利用二维卷积conv2滤波, 如:

i=imread('104_8.tif');

h=[1,1,1;1,1,1;1,1,1];

h=h/9;

j=conv2(i,h);

⑦中值滤波:medfilt2函数用于图像的中值滤波,如:

i=imread('104_8.tif');

j=medfilt2(i);

⑧锐化

(1)利用Sobel算子锐化图像, 如:

i=imread('104_8.tif');

h=[1,2,1;0,0,0;-1,-2,-1];%Sobel算子

j=filter2(h,i);

(2)利用拉氏算子锐化图像, 如:

i=imread('104_8.tif');

j=double(i);

h=[0,1,0;1,-4,0;0,1,0];%拉氏算子

k=conv2(j,h,'same');

m=j-k;

 

图像边缘检测

①sobel算子 如:

i=imread('104_8.tif');

j = edge(i,'sobel',thresh)

②prewitt算子 如:

i=imread('104_8.tif');

j = edge(i,'prewitt',thresh)

③roberts算子  如:

i=imread('104_8.tif');

j = edge(i,'roberts',thresh)

④log算子  如:

i=imread('104_8.tif');

j = edge(i,'log',thresh)

⑤canny算子 如:

i=imread('104_8.tif');

j = edge(i,'canny',thresh)

⑥Zero-Cross算子 如:

i=imread('104_8.tif');

j = edge(i,'zerocross',thresh)

 

形态学图像处理

①膨胀:是在二值化图像中“加长”或“变粗”的操作,函数imdilate执行膨胀运算,如:

a=imread('104_7.tif'); %输入二值图像

b=[0 1 0;1 1 1;0 1 0];

c=imdilate(a,b);

②腐蚀:函数imerode执行腐蚀,如:

a=imread('104_7.tif'); %输入二值图像

b=strel('disk',1);

c=imerode(a,b);

③开运算:先腐蚀后膨胀称为开运算,用imopen来实现,如:

 a=imread('104_8.tif');

b=strel('square',2);

c=imopen(a,b);

④闭运算:先膨胀后腐蚀称为闭运算,用imclose来实现,如:

 a=imread('104_8.tif');

b=strel('square',2);

c=imclose(a,b);

 

===========================================================

Matlab 图像处理相关函数命令大全

一、通用函数:

colorbar  显示彩色条

语法:colorbar colorbar('vert') colorbar('horiz') colorbar(h) h=colorbar(...) colorbar(...,'peer',axes_handle)

getimage 从坐标轴取得图像数据

语法:A=getimage(h) [x,y,A]=getimage(h) [...,A,flag]=getimage(h) [...]=getimage


imshow 显示图像

语法:imshow(I,n) imshow(I,[low high]) imshow(BW) imshow(X,map) imshow(RGB) imshow(...,display_option) imshow(x,y,A,...) imshow filename h=imshow(...)


montage 在矩形框中同时显示多幅图像

语法:montage(I) montage(BW) montage(X,map) montage(RGB) h=montage(...)


immovie 创建多帧索引图的电影动画

语法:mov=immovie(X,map) mov=immovie(RGB)


subimage 在一副图中显示多个图像

语法:subimage(X,map) subimage(I) subimage(BW)   subimage(RGB) subimage(x,y,...) subimage(...)


truesize 调整图像显示尺寸

语法:truesize(fig,[mrows mcols]) truesize(fig)


warp 将图像显示到纹理映射表面

语法:warp(X,map) warp(I ,n) warp(z,...) warp(x,y,z,...)   h=warp(...)


zoom 缩放图像

语法:zoom on zoom off zoom out zoom reset zoom zoom xon zoom yon zoom(factor) zoom(fig,option)

 

二、图像文件I/O函数命令

imfinfo  返回图形图像文件信息

语法:info=imfinfo(filename,fmt) info=imfinfo(filename)


imread  从图像文件中读取(载入)图像

语法:A=imread(filename,fmt) [X,map]=imread(filename,fmt) [...]=imread(filename) [...]=imread(URL,...) [...]=imread(...,idx) (CUR,ICO,and TIFF only) [...]=imread(...,'frames',idx) (GIF only) [...]=imread(...,ref) (HDF only) [...]=imread(...,'BackgroundColor',BG) (PNG only) [A,map,alpha] =imread(...) (ICO,CUR,PNG only)


imwrite  把图像写入(保存)图像文件中

语法:imwrite(A,filename,fmt) imwrite(X,map,filename,fmt) imwrite(...,filename) imwite(...,Param1,Val1,Param2,Val2...)


imcrop  剪切图像

语法:I2=imcrop(I) X2=imcrop(X,map) RGB2=imcrop(RGB) I2=imcrop(I,rect) X2=imcrop(RGB,rect) [...]=imcrop(x,y,...) [A,rect]=imcrop(...) [x,y,A,rect]=imcrop(...)


imresize  改变图像大小

语法:B=imresize(A,m,method)


imrotate  旋转图像

语法:B=imrotate(A,angle,method) B=imrotate(A,angle,method,'crop')

 

三、像素和统计处理函数

corr2  计算两个矩形的二维相关系数

语法:r=corr2(A,B)


imcontour 创建图像数据的轮廓图

语法:imcontour(I,n) imcontour(I,v) imcontour(x,y,...) imcontour(...,LineSpec) [C,h] =imcontour(...)


imfeature  计算图像区域的特征尺寸

语法:stats=imfeature(L,measurements) stats=imfeature(L,measurements,n)


imbist  显示图像数据的柱状图


impixel 确定像素颜色值

语法:P=impixel(I) P=impixel(X,map) P=impixel(RGB) P=impixel(I,c,r) P=impixel(X,map,c,r) P=impixel(RGB,c,r) [c,r,P]=impixel(...) P=impixel(x,y,I,xi,yi) P=impixel(x,y,RGB,xi,yi) P=impixel(x,y,X,map,xi,yi)

[xi,yi,P]=impixel(x,y,...)


improfile 沿线段计算剖面图的像素值

语法:c=improfile c=improfile(n) c=improfile(I,xi,yi) c=improfile(I,xi,yi,n)   [cx,cy,c]=improfile(...) [cx,cy,c,xi,yi]=improfile(...) [...]=improfile(x,y,I,xi,yi)   [...]=improfile(x,y,I,xi,yi,n) [...]=improfile(...,method)


mean2 计算矩阵元素的平均值

语法:B=mean2(A)


pixval  显示图像像素信息

语法:pixval on


std2 计算矩阵元素的标准偏移

语法:b=std2(A)

 

四、图像分析函数:

edge 图像边缘检测

语法:BW=edge(I,'sobel') BW=edge(I,'sobel',thresh) BW=edge(I,'sobel',thresh,direction) [BW,thresh]=edge(I,'sobel',...) BW=edge(I,'prewitt') BW=edge(I,'prewitt',thresh) BW=edge(I,'prewitt',thresh,direction)

[BW,thresh]=edge(I,'prewitt',...)   BW=edge(I,'roberts') BW=edge(I,'roberts',thresh) [BW,thresh]=edge(I,'roberts',...) BW=edge(I,'log') BW=edge(I,'log',thresh) BW=edge(I,'log',thresh,sigma) [BW,threshold]=edge(I,'log',...) BW=edge(I,'zerocross',thresh,h) [BW,thresh]=edge(I,'zerocross',...)

BW=edge(I,'canny') BW=edge(I,'canny',thresh) BW=edge(I,'canny',thresh,sigma) [BW,threshold]=edge(I,'canny',...)

qtgetblk  获取四叉树分解的块值

语法:[vals,r,c]=qtgetblk(I,S,dim) [vals,idx]=qtgetblk(I,S,dim)

qtsetblk 设置四叉树分解中的块值

语法:J=qtsetblk(I,S,dim,vals)

 

五、图像增强函数

histeq 用柱状图均等化增强对比

语法:J=histeq(I,hgram) J=histeq(I,n) [J,T]=histeq(I,...) newmap=histeq(X,map,hgram) newmap=histeq(X,map)

imadjust 调整图像灰度值或颜色映像表

语法:J=imadjust(I,[low_in ,high_in]),[low_out ,high_out],gamma) newmap=imadjust(map,[low_in ,high_in]),[low_out ,high_out],gamma) RGB2=imadjust(RGB1,...)

imnoise 增强图像的渲染效果

语法:J=imnoise(I,type) J=imnoise(I,type,parameters)

medfilt2 进行二维中值过滤

语法:B=medfilt2(A,[m n]) B=medfilt2(A) B=medfilt2(A,'indexed',...)

ordfilt2 进行二维统计顺序过滤

语法:B=ordfilt2(A,order,domain) B=ordfilt2(A,order,domain,S) B=ordfilt2(...,padopt)

wiener2 进行二维适应性去噪过滤处理

语法:J=wiener2(I,[m  n],noise) [J,noise]=wiener2(I,[m n])

 

六、线性滤波函数

conv2 进行二维卷积操作

语法:C=conv2(A,B) C=conv2(hcol,hrow,A) C=conv2(...,'shape')

convmtx2 计算二维卷积矩阵

语法:T=convmtx2(H,m,n) T=convmtx2(H,[m n])

convn 计算n维卷积

语法:C=convn(A,B) C=convn(A,B,'shape')

filter2 进行二维线性过滤操作

语法:Y=filter2(h,X) Y=filter2(h,X,shape)

fspecial 创建预定义过滤器

语法:h=fspecial(type) h=fspecial(type,parameters)

 

七、线性二维滤波设计函数

freqspace 确定二维频率响应的频率空间

语法:[f1,f2]=freqspace(n) [f1,f2]=freqspace([m n]) [x1 ,y1]=freqspace(...,'meshgrid') f=freqspace(N) f=freqspace(N,'whole')

freqz2 计算二维频率响应

语法:[H,f1,f2]=freqz2(h,n1,n2) [H,fi,f2]]=freqz2(h,[n2,n1]) [H,fi,f2]]=freqz2(h,f1,f2]) [H,fi,f2]]=freqz2(h) [...]=freqz2(h,...,[dx dy]) [...]=freqz2(h,...,dx) freqz2(...)

fsamp2 用频率采样法设计二维FIR过滤器

语法:h=fsamp2(Hd) h=fsamp2(f1,f2,Hd,[m n])

ftrans2 通过频率转换设计二维FIR过滤器

语法:h=ftrans2(b,t) h=ftrans2(b)

fwind1 用一维窗口方法设计二维FIR过滤器

语法:h=fwind1(Hd,win) h=fwind1(Hd,win1,win2) h=fwind1(f1,f2,Hd,...)

fwind2 用二维窗口方法设计二维FIR过滤器

语法:h=fwind2(Hd,win) h=fwind2(f1,f2,Hd,win)

 

八、图像变换函数

dct2 进行二维离散余弦变换(反余弦变换用idct2)

语法:B=dct2(A) B=dct2(A,m.n) B=dct2(A,[m n])

dctmtx 计算离散余弦傅立叶变换

语法:D=dctmtx(n)

fft2 进行二维快速傅立叶变换(反变换用ifft2)

语法:Y=fft2(X) Y=fft2(X,m,n)

fftn 进行n维快速傅立叶变换(反变换用ifftn)

语法:Y=ffn(X) Y=fftn(X,siz)

fftshift 快速傅立叶变换的DC组件移到光谱中心

语法:Y=fftshift(X) Y=fftshift(X,dim)

iradon 进行反radon变换

语法:I=iradon(P,theta) I=iradon(P,theta,interp,filter,d,n) [I,h]=iradon(...)

phantom 产生一个头部幻影图像

语法:P=phantom(def,n) P=phantom(E,n) [P,E]=phantom(...)

radon 计算radon变换

语法:R=radon(I,theta) [R,xp]=radon(...)

 

九、边沿和块处理函数

bestblk 确定进行块操作的块大小

语法:siz=bestblk([m n],k) [mb,nb]=bestblk([m n],k)

blkproc 实现图像的显示块操作

语法:B=blkproc(A,[m n]),fun) B=blkproc(A,[m n],fun,P1,P2,...) B=blkproc(A,[m n],[mborder nborder],fun,...)

col2im 将矩阵的列重新组织到块中

语法:A=col2im(B,[m n],[mm nn],block_type) A=col2im(B,[m n],[mm nn])

colfilt 利用列相关函数进行边沿操作

语法:B=colfilt(A,[m n],block_type,fun) B=colfilt(A,[m n],block_type,fun,P1,P2,...) B=colfilt(A,[m n],[mblock nblock],...) B=colfilt(A,'indexed',...)

im2col 重调图像块为列

语法:B=im2col(A,[m n],block_type) B=im2col(A,[m n]) B=im2col(A,'indexed',...)

nlfilter 进行边沿操作

语法:B=nlfilter(A,[m n],fun) B=nlfilter(A,[m n],fun,P1,P2,...) B=nlfilter(A,'indexed',...)

 

十、二进制图像操作函数

applylut 在二进制图像中利用lookup表进行行边沿操作

语法:A=applylut(BW,LUT)

bwarea 计算二进制图像对象的面积

语法:total=bwarea(BW)

bweuler 计算二进制图像的欧拉数

语法:eul=bweuler(BW)

bwfill 填充二进制图像的背景色

语法:BW2=bwfill(BW1,c,r,n) BW2=bwfill(BW1,n) [BW2,idx]=bwfill(...) BW2=bwfill(x,y,BW1,xi,yi,n) [x,y,BW2,idx,xi,yi]=bwfill(...)   [BW2,idx]=bwfill(BW1,'holes',n)

bwlabel 标注二进制图像中已连接的部分

语法:L=bwlabel(BW,n) [L,num]=bwlabel(BW,n)

bwmorph 提取二进制图像的轮廓

语法:BW2=bwmorph(BW1,operation) BW2=bwmorph(BW1,operation,n)

bwperim 计算二进制图像中对象的周长

语法:BW2=bwperim(BW1) BW2=bwperim(BW1,CONN)

bwselect 在二进制图像中选择对象

语法:BW2=bwselect(BW1,c,r,n) BW2=bwselect(BW1,n) [BW2,idx]=bwselect(...) BW2=bwselect(x,y,BW1,xi,yi,n) [x,y,BW2,idx,xi,yi]=bwselect(...)

dilate 放大二进制图像

语法:BW2=dilate(BW1,SE) BW2=dilate(BW1,SE,alg) BW2=dilate(BW1,SE,...,n)

erode 弱化二进制图像的边界

语法:BW2=erode(BW1,SE) BW2=erode(BW1,SE,alg) BW2=erode(BW1,SE,...,n)

makelut 创建一个用于applylut函数的lookup表

语法:lut=makelut(fun,n) lut=makelut(fun,n,P1,P2,...)

 

十一、区域处理函数

roicolor 选择感兴趣的颜色区

语法:BW=roicolor(A,low,high) BW=rocicolor(A,v)

roifill 在图像的任意区域中进行平滑插补

语法:J=roifill(I,c,r) J=roifill(I) J=roifill(I,BW) [J,BW]=roifill(...) J=roifill(x,y,I,xi,yi) [x,y,J,BW,xi,yi]=roifill(...)

roifilt2 过滤敏感区域

语法:J=roifilt2(h,I,BW) J=roifilt2(I,BW,fun) J=roifilt2(I,BW,fun,P1,P2,...)

roipoly 选择一个敏感的多边形区域

语法:BW=roipoly(I,c,r) BW=roipoly(I) BW=roipoly(x,y,I,xi,yi) [BW,xi,yi]=roipoly(...) [x,y,BW,xi,yi]=roipoly(...)

 

十二、颜色映像处理函数

brighten 增加或降低颜色映像表的亮度

语法:brighten(beta) brighten(h,beta) newmap=brighten(beta) newmap=brighten(cmap,beta)

cmpermute 调整颜色映像表中的颜色

语法:[Y,newmap]=cmpermute(X,map) [Y,newmap]=cmpermute(X,map,index)

cmunigue 查找颜色映像表中特定的颜色及相应的图像

语法:[Y,newmap]=cmunigue(X,map) [Y,newmap]=cmunigue(RGB) [Y,newmap]=cmunique(I)

imapprox 对索引图像进行近似处理

语法:[Y,newmap]=imapprox(X,map,n)   [Y,newmap]=imapprox(X,map,tol) Y=imapprox(X,map,newmap) [...]=imapprox(...,dither_option)

rgbplot 划分颜色映像表

语法:rgbplot(cmap)

 

十三、颜色空间转换函数

hsv2rgb 转换HSV值为RGB颜色空间:M=hsv2rgb(H)

ntsc2rgb 转换NTSC值为RGB颜色空间:rgbmap=ntsc2rgb(yiqmap) RGB=ntsc2rgb(YIQ)

rgb2hsv 转换RGB值为HSV颜色空间:cmap=rgb2hsv(M)

rgb2ntsc 转换RGB值为NTSC颜色空间:yiqmap=rgb2ntsc(rgbmap) YIQ=rgb2ntsc(RGB)

rgb2ycbcr 转换RGB值为YCbCr颜色空间:ycbcrmap=rgb2ycbcr(rgbmap) YCBCR=rgb2ycbcr(RGB)

ycbcr2rgb 转化YCbCr值为RGB颜色空间:rgbmap=ycbcr2rgb(ycbcrmap) RGB=ycbcr2rgb(YCBCR)

 

十四、图像类型和类型转换函数

dither 通过抖动增加外观颜色分辨率转换图像

语法:X=dither(RGB,map) BW=dither(I)

gray2ind 转换灰度图像为索引图像

语法:[X,map]=gray2ind(I,n) [X,map]=gray2ind(BW,n)

grayslice 从灰度图像为索引图像

语法:X=grayslice(I,n) X=grayslice(I,v)

im2bw 转换图像为二进制图像

语法:BW=im2bw(I,level) BW=im2bw(X,map,level) BW=im2bw(RGB,level)

im2double 转换图像矩阵为双精度型

语法:I2=im2double(I1) RGB2=im2double(RGB1) I=im2double(BW) X2=im2double(X1,'indexed')

double 转换数据为双精度型

语法:double(X)

unit8 、unit16转换数据为8位、16位无符号整型: i=unit8(x) i=unit16(x)

im2unit8 转换图像阵列为8位无符号整型

语法:I2=im2unit8(I1) RGB2=im2unit8(RGB1) I=im2unit8(BW) X2=im2unit8(X1,'indexed')

im2unit16 转换图像阵列为16位无符号整型

语法:I2=im2unit16(I1) RGB2=im2unit16(RGB1) I=im2unit16(BW) X2=im2unit16(X1,'indexed')

ind2gray 把检索图像转化为灰度图像

语法:I=ind2gray(X,map)

ind2rgb  转化索引图像为RGB真彩图像

语法:RGB=ind2rgb(X,map)

isbw 判断是否为二进制图像

语法:flag=isbw(A)

isgray 判断是否为灰度图像

语法:flag=isgray(A)

isind 判断是否为索引图像

语法:flag=isind(A)

isrgb 判断是否为RGB真彩色图像

语法:flag=isrgb(A)

mat2gray 转换矩阵为灰度图像

语法:I=mat2gray(A,[amin amax]) I=mat2gray(A)

rgb2gray 转换RGB图像或颜色映像表为灰度图像

语法:I=rgb2gray(RGB) newmap=rgb2gray(map)

rgb2ind 转换RGB图像为索引图像

语法:[X,map]=rgb2ind(RGB,tol) [X,map]=rgb2ind(RGB,n) X=rgb2ind(RGB,map) [...]=rgb2ind(...,dither_option)

 

十五、新增图像处理工具箱函数

adapthisteq 限制对比度直方图均衡化: J=adapthisteq(I) J=adapthisteq(I,param1,val1,param2,val2...)

applycform 用于颜色空间变换 out=applyform(I,C)

bwboundaries 描绘二进制图像边界

语法: B=bwboundaries(BW) B=bwboundaries(BW,CONN) B=bwboundaries(BW,CONN,options) [BW,CONN,options] [BL]=bwboundaries(...) [BLNA]=bwboundaries()

bwtraceboundary 描述二进制图像中的物体

B=bwtraceboundary(BW,P,fstep) B=bwtraceboundary(BW,P,fstep,CONN) B=bwtraceboundary(...N,dir)

decorrstrech 对多通道图像进行去相关处理

语法:S=decorrstretch(I) S=decorrstretch(I,TOL)

dicomdict 获取或读取DICOM文件

语法:dicomdict('set',dictionary) dictionary=dicomdict('get')

getline 用鼠标选择ployline

语法:[x,y]=getline(fig) [x,y]=getline(ax) [x,y]=getline [x,y]=getline(...,'closed')

getpts 用鼠标选择像素点

语法:[x,y]=getpts(fig) [x,y]=getpts(ax) [x,y]=getpts

getrect 用鼠标选择矩阵

语法:rect=getrect(fig) rect=getrect(ax) rect=getrect(fig)

iccread 读取ICC剖面

语法:P=iccread(filename)

im2java2d 将图像转换为Java缓冲图像

语法:jimage=im2java2d(I) jimage=im2java2d(X,MAP)

imview 在图像与蓝旗中显示图像

语法:imview(I)   imview(RGB) imview(X,map) imview(I,range) imview(filename) imview(....'InitialMagnification',initial_mag) h=imview(...)    imview close all

ippl 检查IPPL的存在

语法:TF=ippl [TF B]=ippl

iptdemos 显示图像处理工具箱中的索引图像

lab2double、lab2unit16、lab2unit8 将L*a*b数据分别转换为双精度、16位数据、8位数据

makecform 创造一个色彩转换结构

poly2mask 把多边形区域转换成mask区域

语法:BW=poly2mask(x,y,m,n)

unitlut 查找表中A像素值

语法:B=unitlut(A,LUT)

xyz2double、xyz2unit16 将颜色数据从XYZ转换到双精度、16进制。

语法:xyzd=xyz2double(XYZ) xyz16=xyz2unit16(xyz)

2010-08-20 14:38:00 fengbingchun 阅读数 9822

转自:http://blog.163.com/crazyzcs@126/blog/static/1297420502010229104452729/ (非原处)

 

图像增强

1. 直方图均衡化的 Matlab 实现
1.1 imhist 函数
功能:计算和显示图像的色彩直方图
格式:imhist(I,n)
        imhist(X,map)
说明:imhist(I,n) 其中,n 为指定的灰度级数目,缺省值为256;imhist(X,map) 就算和显示索引色图像 X 的直方图,map 为调色板。用

stem(x,counts) 同样可以显示直方图。
1.2 imcontour 函数
功能:显示图像的等灰度值图
格式:imcontour(I,n),imcontour(I,v)
说明:n 为灰度级的个数,v 是有用户指定所选的等灰度级向量。
1.3 imadjust 函数
功能:通过直方图变换调整对比度
格式:J=imadjust(I,[low high],[bottom top],gamma)
        newmap=imadjust(map,[low high],[bottom top],gamma)
说明:J=imadjust(I,[low high],[bottom top],gamma) 其中,gamma 为校正量r,[low high] 为原图像中要变换的灰度范围,[bottom top]

指定了变换后的灰度范围;newmap=imadjust(map,[low high],[bottom top],gamma) 调整索引色图像的调色板 map 。此时若 [low high] 和

[bottom top] 都为2×3的矩阵,则分别调整 R、G、B 3个分量。
1.4 histeq 函数
功能:直方图均衡化
格式:J=histeq(I,hgram)
        J=histeq(I,n)
        [J,T]=histeq(I,...)
        newmap=histeq(X,map,hgram)
        newmap=histeq(X,map)
        [new,T]=histeq(X,...)
说明:J=histeq(I,hgram) 实现了所谓“直方图规定化”,即将原是图象 I 的直方图变换成用户指定的向量 hgram 。hgram 中的每一个元素

都在 [0,1] 中;J=histeq(I,n) 指定均衡化后的灰度级数 n ,缺省值为 64;[J,T]=histeq(I,...) 返回从能将图像 I 的灰度直方图变换成

图像 J 的直方图的变换 T ;newmap=histeq(X,map) 和 [new,T]=histeq(X,...) 是针对索引色图像调色板的直方图均衡。
2. 噪声及其噪声的 Matlab 实现
        imnoise 函数
格式:J=imnoise(I,type)
        J=imnoise(I,type,parameter)
说明:J=imnoise(I,type) 返回对图像 I 添加典型噪声后的有噪图像 J ,参数 type 和 parameter 用于确定噪声的类型和相应的参数。
3. 图像滤波的 Matlab 实现
3.1 conv2 函数
功能:计算二维卷积
格式:C=conv2(A,B)
        C=conv2(Hcol,Hrow,A)
        C=conv2(...,'shape')
说明:对于 C=conv2(A,B) ,conv2 的算矩阵 A 和 B 的卷积,若 [Ma,Na]=size(A), [Mb,Nb]=size(B), 则 size(C)=[Ma+Mb-1,Na+Nb-1];

C=conv2(Hcol,Hrow,A) 中,矩阵 A 分别与 Hcol 向量在列方向和 Hrow 向量在行方向上进行卷积;C=conv2(...,'shape') 用来指定 conv2

返回二维卷积结果部分,参数 shape 可取值如下:
        》full 为缺省值,返回二维卷积的全部结果;
        》same 返回二维卷积结果中与 A 大小相同的中间部分;
        valid 返回在卷积过程中,未使用边缘补 0 部分进行计算的卷积结果部分,当 size(A)>size(B) 时,size(C)=[Ma-Mb+1,Na-Nb+1]


3.2 conv 函数
功能:计算多维卷积
格式:与 conv2 函数相同
3.3 filter2函数
功能:计算二维线型数字滤波,它与函数 fspecial 连用
格式:Y=filter2(B,X)
        Y=filter2(B,X,'shape')
说明:对于 Y=filter2(B,X) ,filter2 使用矩阵 B 中的二维 FIR 滤波器对数据 X 进行滤波,结果 Y 是通过二维互相关计算出来的,其大

小与 X 一样;对于 Y=filter2(B,X,'shape') ,filter2 返回的 Y 是通过二维互相关计算出来的,其大小由参数 shape 确定,其取值如下


        》full 返回二维相关的全部结果,size(Y)>size(X);
        》same 返回二维互相关结果的中间部分,Y 与 X 大小相同;
        》valid 返回在二维互相关过程中,未使用边缘补 0 部分进行计算的结果部分,有 size(Y)<size(X) 。
3.4 fspecial 函数
功能:产生预定义滤波器
格式:H=fspecial(type)
        H=fspecial('gaussian',n,sigma)         高斯低通滤波器
        H=fspecial('sobel')                          Sobel 水平边缘增强滤波器
        H=fspecial('prewitt')                       Prewitt 水平边缘增强滤波器
        H=fspecial('laplacian',alpha)             近似二维拉普拉斯运算滤波器
        H=fspecial('log',n,sigma)                 高斯拉普拉斯(LoG)运算滤波器
        H=fspecial('average',n)                   均值滤波器
        H=fspecial('unsharp',alpha)             模糊对比增强滤波器
说明:对于形式 H=fspecial(type) ,fspecial 函数产生一个由 type 指定的二维滤波器 H ,返回的 H 常与其它滤波器搭配使用。
4. 彩色增强的 Matlab 实现
4.1 imfilter函数
功能:真彩色增强
格式:B=imfilter(A,h)
说明:将原始图像 A 按指定的滤波器 h 进行滤波增强处理,增强后的图像 B 与 A 的尺寸和类型相同

图像的变换
1. 离散傅立叶变换的 Matlab 实现
      Matlab 函数 fft、fft2 和 fftn 分别可以实现一维、二维和 N 维 DFT 算法;而函数 ifft、ifft2 和 ifftn 则用来计算反 DFT 。

这些函数的调用格式如下:
         A=fft(X,N,DIM)
      其中,X 表示输入图像;N 表示采样间隔点,如果 X 小于该数值,那么 Matlab 将会对 X 进行零填充,否则将进行截取,使之长度为

N ;DIM 表示要进行离散傅立叶变换。
        A=fft2(X,MROWS,NCOLS)
其中,MROWS 和 NCOLS 指定对 X 进行零填充后的 X 大小。
        A=fftn(X,SIZE)
其中,SIZE 是一个向量,它们每一个元素都将指定 X 相应维进行零填充后的长度。
      函数 ifft、ifft2 和 ifftn的调用格式于对应的离散傅立叶变换函数一致。
例子:图像的二维傅立叶频谱
% 读入原始图像
I=imread('lena.bmp');
imshow(I)
% 求离散傅立叶频谱
J=fftshift(fft2(I));
figure;
imshow(log(abs(J)),[8,10])
2. 离散余弦变换的 Matlab 实现
2.1. dCT2 函数
功能:二维 DCT 变换
格式:B=dct2(A)
        B=dct2(A,m,n)
        B=dct2(A,[m,n])
说明:B=dct2(A) 计算 A 的 DCT 变换 B ,A 与 B 的大小相同;B=dct2(A,m,n) 和 B=dct2(A,[m,n]) 通过对 A 补 0 或剪裁,使 B 的大

小为 m×n。
2.2. dict2 函数
功能:DCT 反变换
格式:B=idct2(A)
        B=idct2(A,m,n)
        B=idct2(A,[m,n])
说明:B=idct2(A) 计算 A 的 DCT 反变换 B ,A 与 B 的大小相同;B=idct2(A,m,n) 和 B=idct2(A,[m,n]) 通过对 A 补 0 或剪裁,使 B

的大小为 m×n。
2.3. dctmtx函数
功能:计算 DCT 变换矩阵
格式:D=dctmtx(n)
说明:D=dctmtx(n) 返回一个 n×n 的 DCT 变换矩阵,输出矩阵 D 为 double 类型。
3. 图像小波变换的 Matlab 实现
3.1 一维小波变换的 Matlab 实现
(1) dwt 函数
功能:一维离散小波变换
格式:[cA,cD]=dwt(X,'wname')
        [cA,cD]=dwt(X,Lo_D,Hi_D)
说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数 'wname' 对信号 X 进行分解,cA、cD

分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2) idwt 函数
功能:一维离散小波反变换
格式:X=idwt(cA,cD,'wname')
        X=idwt(cA,cD,Lo_R,Hi_R)
        X=idwt(cA,cD,'wname',L)
        X=idwt(cA,cD,Lo_R,Hi_R,L)
说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
        'wname' 为所选的小波函数
        X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和 Hi_R 经小波反变换重构原始信号 X 。
        X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。
3.2 二维小波变换的 Matlab 实现
          二维小波变换的函数
-------------------------------------------------
     函数名                函数功能
---------------------------------------------------
     dwt2            二维离散小波变换
   wavedec2       二维信号的多层小波分解
     idwt2           二维离散小波反变换
   waverec2        二维信号的多层小波重构
   wrcoef2          由多层小波分解重构某一层的分解信号
   upcoef2          由多层小波分解重构近似分量或细节分量
   detcoef2         提取二维信号小波分解的细节分量
   appcoef2        提取二维信号小波分解的近似分量
   upwlev2         二维小波分解的单层重构
   dwtpet2         二维周期小波变换
   idwtper2        二维周期小波反变换
-------------------------------------------------------------
(1) wcodemat 函数
功能:对数据矩阵进行伪彩色编码
格式:Y=wcodemat(X,NB,OPT,ABSOL)
        Y=wcodemat(X,NB,OPT)
        Y=wcodemat(X,NB)
        Y=wcodemat(X)
说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵 Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;
       OPT 指定了编码的方式(缺省值为 'mat'),即:
                 OPT='row' ,按行编码
                 OPT='col' ,按列编码
                 OPT='mat' ,按整个矩阵编码
       ABSOL 是函数的控制参数(缺省值为 '1'),即:
                 ABSOL=0 时,返回编码矩阵
                 ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)
(2) dwt2 函数
功能:二维离散小波变换
格式:[cA,cH,cV,cD]=dwt2(X,'wname')
        [cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)
说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数 'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分

量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分

解信号 X 。
(3) wavedec2 函数
功能:二维信号的多层小波分解
格式:[C,S]=wavedec2(X,N,'wname')
        [C,S]=wavedec2(X,N,Lo_D,Hi_D)
说明:[C,S]=wavedec2(X,N,'wname') 使用小波基函数 'wname' 对二维信号 X 进行 N 层分解;[C,S]=wavedec2(X,N,Lo_D,Hi_D) 使用指定

的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。
(4) idwt2 函数
功能:二维离散小波反变换
格式:X=idwt2(cA,cH,cV,cD,'wname')
        X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)
        X=idwt2(cA,cH,cV,cD,'wname',S)
        X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)
说明:X=idwt2(cA,cH,cV,cD,'wname') 由信号小波分解的近似信号 cA 和细节信号 cH、cH、cV、cD 经小波反变换重构原信号 X

;X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R) 使用指定的重构低通和高通滤波器 Lo_R 和 Hi_R 重构原信号 X ;X=idwt2(cA,cH,cV,cD,'wname',S)

和 X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S) 返回中心附近的 S 个数据点。
(5) waverec2 函数
说明:二维信号的多层小波重构
格式:X=waverec2(C,S,'wname')
        X=waverec2(C,S,Lo_R,Hi_R)
说明:X=waverec2(C,S,'wname') 由多层二维小波分解的结果 C、S 重构原始信号 X ,'wname'

为使用的小波基函数;X=waverec2(C,S,Lo_R,Hi_R) 使用重构低通和高通滤波器 Lo_R 和 Hi_R 重构原信号。

图像处理工具箱
1. 图像和图像数据
   缺省情况下,MATLAB将图像中的数据存储为双精度类型(double),64位浮点
数,所需存储量很大;MATLAB还支持另一种类型无符号整型(uint8),即图像矩
阵中每个数据占用1个字节。
   在使用MATLAB工具箱时,一定要注意函数所要求的参数类型。另外,uint8
与double两种类型数据的值域不同,编程需注意值域转换。
          从uint8到double的转换
   ---------------------------------------------
       图像类型        MATLAB语句
   ---------------------------------------------
     索引色             B=double(A)+1
     索引色或真彩色 B=double(A)/255
     二值图像          B=double(A)
   ---------------------------------------------
         从double到uint8的转换
   ---------------------------------------------
       图像类型        MATLAB语句
   ---------------------------------------------
    索引色               B=uint8(round(A-1))
    索引色或真彩色    B=uint8(round(A*255))
    二值图像            B=logical(uint8(round(A)))
   ---------------------------------------------
2. 图像处理工具箱所支持的图像类型
2.1 真彩色图像
    R、G、B三个分量表示一个像素的颜色。如果要读取图像中(100,50)处的像素值,
可查看三元数据(100,50,1:3)。
    真彩色图像可用双精度存储,亮度值范围是[0,1];比较符合习惯的存储方法是用无
符号整型存储,亮度值范围[0,255]
2.2 索引色图像
   包含两个结构,一个是调色板,另一个是图像数据矩阵。调色板是一个有3列和若干行
的色彩映象矩阵,矩阵每行代表一种颜色,3列分别代表红、绿、蓝色强度的双精度数。
   注意:MATLAB中调色板色彩强度[0,1],0代表最暗,1代表最亮。
          常用颜色的RGB值
   --------------------------------------------
    颜色    R   G   B      颜色    R   G   B
   --------------------------------------------
     黑     0   0   1      洋红    1   0   1
     白     1   1   1      青蓝    0   1   1
     红     1   0   0      天蓝 0.67 0   1
     绿     0   1   0      橘黄    1 0.5 0
     蓝     0   0   1      深红   0.5 0   0
     黄     1   1   0       灰    0.5 0.5 0.5      
   --------------------------------------------
         产生标准调色板的函数
   -------------------------------------------------
    函数名       调色板
   -------------------------------------------------
     Hsv       色彩饱和度,以红色开始,并以红色结束
     Hot       黑色-红色-黄色-白色
     Cool      青蓝和洋红的色度
     Pink      粉红的色度
     Gray      线型灰度
     Bone      带蓝色的灰度
     Jet        Hsv的一种变形,以蓝色开始,以蓝色结束
     Copper    线型铜色度
     Prim       三棱镜,交替为红、橘黄、黄、绿和天蓝
     Flag       交替为红、白、蓝和黑
--------------------------------------------------
   缺省情况下,调用上述函数灰产生一个64×3的调色板,用户也可指定调色板大小。
   索引色图像数据也有double和uint8两种类型。
   当图像数据为double类型时,值1代表调色板中的第1行,值2代表第2行……
   如果图像数据为uint8类型,0代表调色板的第一行,,值1代表第2行……
2.3 灰度图像
   存储灰度图像只需要一个数据矩阵。
   数据类型可以是double,[0,1];也可以是uint8,[0,255]
2.4 二值图像
   二值图像只需一个数据矩阵,每个像素只有两个灰度值,可以采用uint8或double类型存储。
   MATLAB工具箱中以二值图像作为返回结果的函数都使用uint8类型。
2.5 图像序列
   MATLAB工具箱支持将多帧图像连接成图像序列。
   图像序列是一个4维数组,图像帧的序号在图像的长、宽、颜色深度之后构成第4维。
   分散的图像也可以合并成图像序列,前提是各图像尺寸必须相同,若是索引色图像,
调色板也必须相同。
   可参考cat()函数    A=cat(4,A1,A2,A3,A4,A5)
3. MATLAB图像类型转换
         图像类型转换函数
   ---------------------------------------------------------------------------
     函数名                      函数功能
   ---------------------------------------------------------------------------
     dither       图像抖动,将灰度图变成二值图,或将真彩色图像抖动成索引色图像
    gray2ind    将灰度图像转换成索引图像
    grayslice    通过设定阈值将灰度图像转换成索引色图像
     im2bw      通过设定亮度阈值将真彩色、索引色、灰度图转换成二值图
    ind2gray    将索引色图像转换成灰度图像
    ind2rgb      将索引色图像转换成真彩色图像
    mat2gray   将一个数据矩阵转换成一副灰度图
    rgb2gray    将一副真彩色图像转换成灰度图像
    rgb2ind      将真彩色图像转换成索引色图像
   ----------------------------------------------------------------------------
4. 图像文件的读写和查询
4.1 图形图像文件的读取
   利用函数imread()可完成图形图像文件的读取,语法:
     A=imread(filename,fmt)
     [X,map]=imread(filename,fmt)
     [...]=imread(filename)
     [...]=imread(filename,idx) (只对TIF格式的文件)
     [...]=imread(filename,ref) (只对HDF格式的文件)
   通常,读取的大多数图像均为8bit,当这些图像加载到内存中时,Matlab就将其存放
在类uint8中。此为Matlab还支持16bit的PNG和TIF图像,当读取这类文件时,Matlab就将
其存贮在uint16中。
   注意:对于索引图像,即使图像阵列的本身为类uint8或类uint16,imread函数仍将
颜色映象表读取并存贮到一个双精度的浮点类型的阵列中。
4.2 图形图像文件的写入
   使用imwrite函数,语法如下:
   imwrite(A,filename,fmt)
   imwrite(X,map,filename,fmt)
   imwrite(...,filename)
   imwrite(...,parameter,value)
   当利用imwrite函数保存图像时,Matlab缺省的方式是将其简化道uint8的数据格式。
4.3 图形图像文件信息的查询   imfinfo()函数
5. 图像文件的显示
5.1 索引图像及其显示
   方法一:
          image(X)
          colormap(map)
   方法二:
          imshow(X,map)
5.2 灰度图像及其显示
   Matlab 7.0 中,要显示一副灰度图像,可以调用函数 imshow 或 imagesc (即
imagescale,图像缩放函数)
   (1) imshow 函数显示灰度图像
    使用 imshow(I)    或使用明确指定的灰度级书目:imshow(I,32)
    由于Matlab自动对灰度图像进行标度以适合调色板的范围,因而可以使用自定义
大小的调色板。其调用格式如下:
           imshow(I,[low,high])
    其中,low 和 high 分别为数据数组的最小值和最大值。
   (2) imagesc 函数显示灰度图像
   下面的代码是具有两个输入参数的 imagesc 函数显示一副灰度图像
       imagesc(1,[0,1]);
       colormap(gray);
    imagesc 函数中的第二个参数确定灰度范围。灰度范围中的第一个值(通常是0),
对应于颜色映象表中的第一个值(颜色),第二个值(通常是1)则对应与颜色映象表
中的最后一个值(颜色)。灰度范围中间的值则线型对应与颜色映象表中剩余的值(颜色)。
    在调用 imagesc 函数时,若只使用一个参数,可以用任意灰度范围显示图像。在该
调用方式下,数据矩阵中的最小值对应于颜色映象表中的第一个颜色值,数据矩阵中的最大
值对应于颜色映象表中的最后一个颜色值。
5.3 RGB 图像及其显示
   (1) image(RGB)
   不管RGB图像的类型是double浮点型,还是 uint8 或 uint16 无符号整数型,Matlab都
能通过 image 函数将其正确显示出来。
   RGB8 = uint8(round(RGB64×255)); % 将 double 浮点型转换为 uint8 无符号整型
   RGB64 = double(RGB8)/255;            % 将 uint8 无符号整型转换为 double 浮点型
   RGB16 = uint16(round(RGB64×65535)); % 将 double 浮点型转换为 uint16 无符号整型
   RGB64 = double(RGB16)/65535;      % 将 uint16 无符号整型转换为 double 浮点型
   (2) imshow(RGB) 参数是一个 m×n×3 的数组
5.4 二进制图像及其显示
   (1) imshow(BW)
   在 Matlab 7.0 中,二进制图像是一个逻辑类,仅包括 0 和 1 两个数值。像素 0 显示
为黑色,像素 1 显示为白色。
   显示时,也可通过NOT(~)命令,对二进制图象进行取反,使数值 0 显示为白色;1 显示
为黑色。
   例如: imshow(~BW)
   (2) 此外,还可以使用一个调色板显示一副二进制图像。如果图形是 uint8 数据类型,
则数值 0 显示为调色板的第一个颜色,数值 1 显示为第二个颜色。
   例如: imshow(BW,[1 0 0;0 0 1])  
5.5 直接从磁盘显示图像
   可使用一下命令直接进行图像文件的显示:
        imshow filename
   其中,filename 为要显示的图像文件的文件名。
   如果图像是多帧的,那么 imshow 将仅显示第一帧。但需注意,在使用这种方式时,图像
数据没有保存在Matlab 7.0 工作平台。如果希望将图像装入工作台中,需使用 getimage 函
数,从当前的句柄图形图像对象中获取图像数据,
   命令形式为: rgb = getimage;

bwlabel
功能:
标注二进制图像中已连接的部分。
L = bwlabel(BW,n)
[L,num] = bwlabel(BW,n)

isbw
功能:
判断是否为二进制图像。
语法:
flag = isbw(A)
相关命令:
isind, isgray, isrgb
74.isgray
功能:
判断是否为灰度图像。
语法:
flag = isgray(A)
相关命令:
isbw, isind, isrgb

11.bwselect
功能:
在二进制图像中选择对象。
语法:
BW2 = bwselect(BW1,c,r,n)
BW2 = bwselect(BW1,n)
[BW2,idx] = bwselect(...)
举例
BW1 = imread('text.tif');
c = [16 90 144];
r = [85 197 247];
BW2 = bwselect(BW1,c,r,4);
imshow(BW1)
figure, imshow(BW2)

47.im2bw
功能:
转换图像为二进制图像。
语法:
BW = im2bw(I,level)
BW = im2bw(X,map,level)
BW = im2bw(RGB,level)
举例
load trees
BW = im2bw(X,map,0.4);
imshow(X,map)

转自:http://xiaozu.renren.com/xiaozu/106455/333344685

1、图像的变换

① fft2:fft2函数用于数字图像的二维傅立叶变换,如:i=imread('104_8.tif');

j=fft2(i);

②ifft2::ifft2函数用于数字图像的二维傅立叶反变换,如:

 i=imread('104_8.tif');

 j=fft2(i);

k=ifft2(j);

2、模拟噪声生成函数和预定义滤波器

① imnoise:用于对图像生成模拟噪声,如:

 i=imread('104_8.tif');

 j=imnoise(i,'gaussian',0,0.02);%模拟高斯噪声

② fspecial:用于产生预定义滤波器,如:

h=fspecial('sobel');%sobel水平边缘增强滤波器

h=fspecial('gaussian');%高斯低通滤波器

h=fspecial('laplacian');%拉普拉斯滤波器

h=fspecial('log');%高斯拉普拉斯(LoG)滤波器

h=fspecial('average');%均值滤波器

 2、图像的增强

①直方图:imhist函数用于数字图像的直方图显示,如:

i=imread('104_8.tif');

imhist(i);

②直方图均化:histeq函数用于数字图像的直方图均化,如:

i=imread('104_8.tif');

j=histeq(i);

③对比度调整:imadjust函数用于数字图像的对比度调整,如:i=imread('104_8.tif');

j=imadjust(i,[0.3,0.7],[]);

④对数变换:log函数用于数字图像的对数变换,如:

i=imread('104_8.tif');

j=double(i);

k=log(j);

⑤基于卷积的图像滤波函数:filter2函数用于图像滤波,如:i=imread('104_8.tif');

h=[1,2,1;0,0,0;-1,-2,-1];

j=filter2(h,i);

⑥线性滤波:利用二维卷积conv2滤波, 如:

i=imread('104_8.tif');

h=[1,1,1;1,1,1;1,1,1];

h=h/9;

j=conv2(i,h);

⑦中值滤波:medfilt2函数用于图像的中值滤波,如:

i=imread('104_8.tif');

j=medfilt2(i);

⑧锐化

(1)利用Sobel算子锐化图像, 如:

i=imread('104_8.tif');

h=[1,2,1;0,0,0;-1,-2,-1];%Sobel算子

j=filter2(h,i);

(2)利用拉氏算子锐化图像, 如:

i=imread('104_8.tif');

j=double(i);

h=[0,1,0;1,-4,0;0,1,0];%拉氏算子

k=conv2(j,h,'same');

m=j-k;

 3、图像边缘检测

①sobel算子 如:

i=imread('104_8.tif');

j = edge(i,'sobel',thresh)

 ②prewitt算子 如:

i=imread('104_8.tif');

j = edge(i,'prewitt',thresh)

③roberts算子  如:

i=imread('104_8.tif');

j = edge(i,'roberts',thresh)

④log算子  如:

i=imread('104_8.tif');

j = edge(i,'log',thresh)

⑤canny算子 如:

i=imread('104_8.tif');

j = edge(i,'canny',thresh)

⑥Zero-Cross算子 如:

i=imread('104_8.tif');

j = edge(i,'zerocross',thresh)

 4、形态学图像处理

①膨胀:是在二值化图像中“加长”或“变粗”的操作,函数imdilate执行膨胀运算,如:

a=imread('104_7.tif'); %输入二值图像

b=[0 1 0;1 1 1;0 1 0];

c=imdilate(a,b);

②腐蚀:函数imerode执行腐蚀,如:

a=imread('104_7.tif'); %输入二值图像

b=strel('disk',1);

c=imerode(a,b);

③开运算:先腐蚀后膨胀称为开运算,用imopen来实现,如:

 a=imread('104_8.tif');

b=strel('square',2);

c=imopen(a,b);

④闭运算:先膨胀后腐蚀称为闭运算,用imclose来实现,如:

 a=imread('104_8.tif');

b=strel('square',2);

c=imclose(a,b);

 ===========================================================

 Matlab 图像处理相关函数命令大全

 一、通用函数:

colorbar  显示彩色条

语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \ colorbar(...,'peer',axes_handle)

getimage 从坐标轴取得图像数据

语法:A=getimage(h) \ [x,y,A]=getimage(h) \ [...,A,flag]=getimage(h) \ [...]=getimage

imshow 显示图像

语法:imshow(I,n) \ imshow(I,[low high]) \ imshow(BW) \ imshow(X,map) \ imshow(RGB)\ imshow(...,display_option) \ imshow(x,y,A,...) \ imshow filename \ h=imshow(...)

montage 在矩形框中同时显示多幅图像

语法:montage(I) \ montage(BW) \ montage(X,map) \ montage(RGB) \ h=montage(...)

immovie 创建多帧索引图的电影动画

语法:mov=immovie(X,map) \ mov=immovie(RGB)

subimage 在一副图中显示多个图像

语法:subimage(X,map) \ subimage(I) \ subimage(BW) \  subimage(RGB) \ subimage(x,y,...) \ subimage(...)

truesize 调整图像显示尺寸

语法:truesize(fig,[mrows mcols]) \ truesize(fig)

warp 将图像显示到纹理映射表面

语法:warp(X,map) \ warp(I ,n) \ warp(z,...) warp(x,y,z,...) \  h=warp(...)

zoom 缩放图像

语法:zoom on \ zoom off \ zoom out \ zoom reset \ zoom \ zoom xon \ zoom yon\ zoom(factor) \ zoom(fig,option)

 二、图像文件I/O函数命令

imfinfo  返回图形图像文件信息

语法:info=imfinfo(filename,fmt) \ info=imfinfo(filename)

imread  从图像文件中读取(载入)图像

语法:A=imread(filename,fmt) \ [X,map]=imread(filename,fmt) \ [...]=imread(filename) \ [...]=imread(URL,...) \ [...]=imread(...,idx) (CUR,ICO,and TIFF only) \ [...]=imread(...,'frames',idx) (GIF only) \ [...]=imread(...,ref) (HDF only) \ [...]=imread(...,'BackgroundColor',BG) (PNG only) \ [A,map,alpha] =imread(...) (ICO,CUR,PNG only)

imwrite  把图像写入(保存)图像文件中

语法:imwrite(A,filename,fmt) \ imwrite(X,map,filename,fmt) \ imwrite(...,filename) \ imwite(...,Param1,Val1,Param2,Val2...)

imcrop  剪切图像

语法:I2=imcrop(I) \ X2=imcrop(X,map) \ RGB2=imcrop(RGB) \ I2=imcrop(I,rect) \ X2=imcrop(RGB,rect) \ [...]=imcrop(x,y,...) \ [A,rect]=imcrop(...) \ [x,y,A,rect]=imcrop(...)

imresize  改变图像大小

语法:B=imresize(A,m,method)

imrotate  旋转图像

语法:B=imrotate(A,angle,method) \ B=imrotate(A,angle,method,'crop')

 三、像素和统计处理函数

corr2  计算两个矩形的二维相关系数

语法:r=corr2(A,B)

imcontour 创建图像数据的轮廓图

语法:imcontour(I,n) \ imcontour(I,v) \ imcontour(x,y,...) \ imcontour(...,LineSpec) \ [C,h] =imcontour(...)

imfeature  计算图像区域的特征尺寸

语法:stats=imfeature(L,measurements) \ stats=imfeature(L,measurements,n)

imbist  显示图像数据的柱状图

impixel 确定像素颜色值

语法:P=impixel(I) \ P=impixel(X,map) \ P=impixel(RGB) \ P=impixel(I,c,r) \ P=impixel(X,map,c,r) \ P=impixel(RGB,c,r) \ [c,r,P]=impixel(...) \ P=impixel(x,y,I,xi,yi) \ P=impixel(x,y,RGB,xi,yi) \ P=impixel(x,y,X,map,xi,yi) \

[xi,yi,P]=impixel(x,y,...)
improfile 沿线段计算剖面图的像素值

语法:c=improfile \ c=improfile(n) \ c=improfile(I,xi,yi) \ c=improfile(I,xi,yi,n) \  [cx,cy,c]=improfile(...)  \ [cx,cy,c,xi,yi]=improfile(...) \ [...]=improfile(x,y,I,xi,yi) \  [...]=improfile(x,y,I,xi,yi,n) \ [...]=improfile(...,method)

mean2 计算矩阵元素的平均值

语法:B=mean2(A)

pixval  显示图像像素信息

语法:pixval on

std2 计算矩阵元素的标准偏移

语法:b=std2(A)

四、图像分析函数:

edge 图像边缘检测

语法:BW=edge(I,'sobel') \ BW=edge(I,'sobel',thresh) \ BW=edge(I,'sobel',thresh,direction) \ [BW,thresh]=edge(I,'sobel',...) \ BW=edge(I,'prewitt') \ BW=edge(I,'prewitt',thresh) \ BW=edge(I,'prewitt',thresh,direction) \

[BW,thresh]=edge(I,'prewitt',...) \  BW=edge(I,'roberts') \ BW=edge(I,'roberts',thresh) \ [BW,thresh]=edge(I,'roberts',...) \ BW=edge(I,'log') \ BW=edge(I,'log',thresh) \ BW=edge(I,'log',thresh,sigma) \ [BW,threshold]=edge(I,'log',...) \ BW=edge(I,'zerocross',thresh,h) \ [BW,thresh]=edge(I,'zerocross',...) \

BW=edge(I,'canny') \ BW=edge(I,'canny',thresh) \ BW=edge(I,'canny',thresh,sigma) \ [BW,threshold]=edge(I,'canny',...)

qtgetblk  获取四叉树分解的块值

语法:[vals,r,c]=qtgetblk(I,S,dim) \ [vals,idx]=qtgetblk(I,S,dim)

qtsetblk 设置四叉树分解中的块值

语法:J=qtsetblk(I,S,dim,vals)

五、图像增强函数

histeq 用柱状图均等化增强对比

语法:J=histeq(I,hgram) \ J=histeq(I,n) \ [J,T]=histeq(I,...) \ newmap=histeq(X,map,hgram) \ newmap=histeq(X,map)

imadjust 调整图像灰度值或颜色映像表

语法:J=imadjust(I,[low_in ,high_in]),[low_out ,high_out],gamma) \ newmap=imadjust(map,[low_in ,high_in]),[low_out ,high_out],gamma) \ RGB2=imadjust(RGB1,...)

imnoise 增强图像的渲染效果

语法:J=imnoise(I,type) \ J=imnoise(I,type,parameters)

medfilt2 进行二维中值过滤

语法:B=medfilt2(A,[m n]) \ B=medfilt2(A) \ B=medfilt2(A,'indexed',...)

ordfilt2 进行二维统计顺序过滤

语法:B=ordfilt2(A,order,domain) \ B=ordfilt2(A,order,domain,S) \ B=ordfilt2(...,padopt)

wiener2 进行二维适应性去噪过滤处理

语法:J=wiener2(I,[m  n],noise) \ [J,noise]=wiener2(I,[m n])

六、线性滤波函数

conv2 进行二维卷积操作

语法:C=conv2(A,B) \ C=conv2(hcol,hrow,A) \ C=conv2(...,'shape')

convmtx2 计算二维卷积矩阵

语法:T=convmtx2(H,m,n) \ T=convmtx2(H,[m n])

convn 计算n维卷积

语法:C=convn(A,B) \ C=convn(A,B,'shape')

filter2 进行二维线性过滤操作

语法:Y=filter2(h,X) \ Y=filter2(h,X,shape)

fspecial 创建预定义过滤器

语法:h=fspecial(type) \ h=fspecial(type,parameters)

七、线性二维滤波设计函数

freqspace 确定二维频率响应的频率空间

语法:[f1,f2]=freqspace(n) \ [f1,f2]=freqspace([m n]) \ [x1 ,y1]=freqspace(...,'meshgrid') \ f=freqspace(N) \ f=freqspace(N,'whole')

freqz2 计算二维频率响应

语法:[H,f1,f2]=freqz2(h,n1,n2) \ [H,fi,f2]]=freqz2(h,[n2,n1]) \ [H,fi,f2]]=freqz2(h,f1,f2]) \ [H,fi,f2]]=freqz2(h) \ [...]=freqz2(h,...,[dx dy]) \ [...]=freqz2(h,...,dx) \ freqz2(...)

fsamp2 用频率采样法设计二维FIR过滤器

语法:h=fsamp2(Hd) \ h=fsamp2(f1,f2,Hd,[m n])

ftrans2 通过频率转换设计二维FIR过滤器

语法:h=ftrans2(b,t) \ h=ftrans2(b)

fwind1 用一维窗口方法设计二维FIR过滤器

语法:h=fwind1(Hd,win) \ h=fwind1(Hd,win1,win2) \ h=fwind1(f1,f2,Hd,...)

fwind2 用二维窗口方法设计二维FIR过滤器

语法:h=fwind2(Hd,win) \ h=fwind2(f1,f2,Hd,win)

八、图像变换函数

dct2 进行二维离散余弦变换(反余弦变换用idct2)

语法:B=dct2(A) \ B=dct2(A,m.n) \ B=dct2(A,[m n])

dctmtx 计算离散余弦傅立叶变换

语法:D=dctmtx(n)

fft2 进行二维快速傅立叶变换(反变换用ifft2)

语法:Y=fft2(X) \ Y=fft2(X,m,n)

fftn 进行n维快速傅立叶变换(反变换用ifftn)

语法:Y=ffn(X) \ Y=fftn(X,siz)

fftshift 快速傅立叶变换的DC组件移到光谱中心

语法:Y=fftshift(X) \ Y=fftshift(X,dim)

iradon 进行反radon变换

语法:I=iradon(P,theta) \ I=iradon(P,theta,interp,filter,d,n) \ [I,h]=iradon(...)

phantom 产生一个头部幻影图像

语法:P=phantom(def,n) \ P=phantom(E,n) \ [P,E]=phantom(...)

radon 计算radon变换

语法:R=radon(I,theta) \ [R,xp]=radon(...)

九、边沿和块处理函数

bestblk 确定进行块操作的块大小

语法:siz=bestblk([m n],k) \ [mb,nb]=bestblk([m n],k)

blkproc 实现图像的显示块操作

语法:B=blkproc(A,[m n]),fun) \ B=blkproc(A,[m n],fun,P1,P2,...) \ B=blkproc(A,[m n],[mborder nborder],fun,...)

col2im 将矩阵的列重新组织到块中

语法:A=col2im(B,[m n],[mm nn],block_type) \ A=col2im(B,[m n],[mm nn])

colfilt 利用列相关函数进行边沿操作

语法:B=colfilt(A,[m n],block_type,fun) \ B=colfilt(A,[m n],block_type,fun,P1,P2,...) \ B=colfilt(A,[m n],[mblock nblock],...) \ B=colfilt(A,'indexed',...)

im2col 重调图像块为列

语法:B=im2col(A,[m n],block_type) \ B=im2col(A,[m n]) \ B=im2col(A,'indexed',...)

nlfilter 进行边沿操作

语法:B=nlfilter(A,[m n],fun) \ B=nlfilter(A,[m n],fun,P1,P2,...) \ B=nlfilter(A,'indexed',...)

十、二进制图像操作函数

applylut 在二进制图像中利用lookup表进行行边沿操作

语法:A=applylut(BW,LUT)

bwarea 计算二进制图像对象的面积

语法:total=bwarea(BW)

bweuler 计算二进制图像的欧拉数

语法:eul=bweuler(BW)

bwfill 填充二进制图像的背景色

语法:BW2=bwfill(BW1,c,r,n) \ BW2=bwfill(BW1,n) \ [BW2,idx]=bwfill(...) \ BW2=bwfill(x,y,BW1,xi,yi,n) \ [x,y,BW2,idx,xi,yi]=bwfill(...) \  [BW2,idx]=bwfill(BW1,'holes',n)

bwlabel 标注二进制图像中已连接的部分

语法:L=bwlabel(BW,n) \ [L,num]=bwlabel(BW,n)

bwmorph 提取二进制图像的轮廓

语法:BW2=bwmorph(BW1,operation) \ BW2=bwmorph(BW1,operation,n)

bwperim 计算二进制图像中对象的周长

语法:BW2=bwperim(BW1) \ BW2=bwperim(BW1,CONN)

bwselect 在二进制图像中选择对象

语法:BW2=bwselect(BW1,c,r,n) \ BW2=bwselect(BW1,n) \ [BW2,idx]=bwselect(...) \ BW2=bwselect(x,y,BW1,xi,yi,n) \ [x,y,BW2,idx,xi,yi]=bwselect(...)

dilate 放大二进制图像

语法:BW2=dilate(BW1,SE) \ BW2=dilate(BW1,SE,alg) \ BW2=dilate(BW1,SE,...,n)

erode 弱化二进制图像的边界

语法:BW2=erode(BW1,SE) \ BW2=erode(BW1,SE,alg) \ BW2=erode(BW1,SE,...,n)

makelut 创建一个用于applylut函数的lookup表

语法:lut=makelut(fun,n) \ lut=makelut(fun,n,P1,P2,...)

十一、区域处理函数

roicolor 选择感兴趣的颜色区

语法:BW=roicolor(A,low,high) \ BW=rocicolor(A,v)

roifill 在图像的任意区域中进行平滑插补

语法:J=roifill(I,c,r) \ J=roifill(I) \ J=roifill(I,BW) \ [J,BW]=roifill(...) \ J=roifill(x,y,I,xi,yi) \ [x,y,J,BW,xi,yi]=roifill(...)

roifilt2 过滤敏感区域

语法:J=roifilt2(h,I,BW) \ J=roifilt2(I,BW,fun) \ J=roifilt2(I,BW,fun,P1,P2,...)

roipoly 选择一个敏感的多边形区域

语法:BW=roipoly(I,c,r) \ BW=roipoly(I) \ BW=roipoly(x,y,I,xi,yi) \ [BW,xi,yi]=roipoly(...) \ [x,y,BW,xi,yi]=roipoly(...)

十二、颜色映像处理函数

brighten 增加或降低颜色映像表的亮度

语法:brighten(beta) \ brighten(h,beta) \ newmap=brighten(beta) \ newmap=brighten(cmap,beta)

cmpermute 调整颜色映像表中的颜色

语法:[Y,newmap]=cmpermute(X,map) \ [Y,newmap]=cmpermute(X,map,index)

cmunigue 查找颜色映像表中特定的颜色及相应的图像

语法:[Y,newmap]=cmunigue(X,map) \ [Y,newmap]=cmunigue(RGB) \ [Y,newmap]=cmunique(I)

imapprox 对索引图像进行近似处理

语法:[Y,newmap]=imapprox(X,map,n) \  [Y,newmap]=imapprox(X,map,tol) \ Y=imapprox(X,map,newmap) \ [...]=imapprox(...,dither_option)

rgbplot 划分颜色映像表

语法:rgbplot(cmap)

十三、颜色空间转换函数

hsv2rgb 转换HSV值为RGB颜色空间:M=hsv2rgb(H)

ntsc2rgb 转换NTSC值为RGB颜色空间:rgbmap=ntsc2rgb(yiqmap) \ RGB=ntsc2rgb(YIQ)

rgb2hsv 转换RGB值为HSV颜色空间:cmap=rgb2hsv(M)

rgb2ntsc 转换RGB值为NTSC颜色空间:yiqmap=rgb2ntsc(rgbmap) \ YIQ=rgb2ntsc(RGB)

rgb2ycbcr 转换RGB值为YCbCr颜色空间:ycbcrmap=rgb2ycbcr(rgbmap) \ YCBCR=rgb2ycbcr(RGB)

ycbcr2rgb 转化YCbCr值为RGB颜色空间:rgbmap=ycbcr2rgb(ycbcrmap) \ RGB=ycbcr2rgb(YCBCR)

十四、图像类型和类型转换函数

dither 通过抖动增加外观颜色分辨率转换图像

语法:X=dither(RGB,map) \ BW=dither(I)

gray2ind 转换灰度图像为索引图像

语法:[X,map]=gray2ind(I,n) \ [X,map]=gray2ind(BW,n)

grayslice 从灰度图像为索引图像

语法:X=grayslice(I,n) \ X=grayslice(I,v)

im2bw 转换图像为二进制图像

语法:BW=im2bw(I,level) \ BW=im2bw(X,map,level) \ BW=im2bw(RGB,level)

im2double 转换图像矩阵为双精度型

语法:I2=im2double(I1) \ RGB2=im2double(RGB1) \ I=im2double(BW) \ X2=im2double(X1,'indexed')

double 转换数据为双精度型

语法:double(X)

unit8 、unit16转换数据为8位、16位无符号整型: i=unit8(x) \ i=unit16(x)

im2unit8 转换图像阵列为8位无符号整型

语法:I2=im2unit8(I1) \ RGB2=im2unit8(RGB1) \ I=im2unit8(BW) \ X2=im2unit8(X1,'indexed')

im2unit16 转换图像阵列为16位无符号整型

语法:I2=im2unit16(I1) \ RGB2=im2unit16(RGB1) \ I=im2unit16(BW) \ X2=im2unit16(X1,'indexed')

ind2gray 把检索图像转化为灰度图像

语法:I=ind2gray(X,map)

ind2rgb  转化索引图像为RGB真彩图像

语法:RGB=ind2rgb(X,map)

isbw 判断是否为二进制图像

语法:flag=isbw(A)

isgray 判断是否为灰度图像

语法:flag=isgray(A)

isind 判断是否为索引图像

语法:flag=isind(A)

isrgb 判断是否为RGB真彩色图像

语法:flag=isrgb(A)

mat2gray 转换矩阵为灰度图像

语法:I=mat2gray(A,[amin amax]) \ I=mat2gray(A)

rgb2gray 转换RGB图像或颜色映像表为灰度图像

语法:I=rgb2gray(RGB) \ newmap=rgb2gray(map)

rgb2ind 转换RGB图像为索引图像

语法:[X,map]=rgb2ind(RGB,tol) \ [X,map]=rgb2ind(RGB,n) \ X=rgb2ind(RGB,map) \ [...]=rgb2ind(...,dither_option)

十五、新增图像处理工具箱函数

adapthisteq 限制对比度直方图均衡化: J=adapthisteq(I) \ J=adapthisteq(I,param1,val1,param2,val2...)

applycform 用于颜色空间变换 out=applyform(I,C)

bwboundaries 描绘二进制图像边界

语法: B=bwboundaries(BW) \ B=bwboundaries(BW,CONN) \ B=bwboundaries(BW,CONN,options) [BW,CONN,options] \ [BL]=bwboundaries(...) \ [BLNA]=bwboundaries()

bwtraceboundary 描述二进制图像中的物体

B=bwtraceboundary(BW,P,fstep) \ B=bwtraceboundary(BW,P,fstep,CONN) \ B=bwtraceboundary(...N,dir)

decorrstrech 对多通道图像进行去相关处理

语法:S=decorrstretch(I) \ S=decorrstretch(I,TOL)

dicomdict 获取或读取DICOM文件

语法:dicomdict('set',dictionary) \ dictionary=dicomdict('get')

getline 用鼠标选择ployline

语法:[x,y]=getline(fig) \ [x,y]=getline(ax) \ [x,y]=getline \ [x,y]=getline(...,'closed')

getpts 用鼠标选择像素点

语法:[x,y]=getpts(fig) \ [x,y]=getpts(ax) \ [x,y]=getpts

getrect 用鼠标选择矩阵

语法:rect=getrect(fig) \ rect=getrect(ax) \ rect=getrect(fig)

iccread 读取ICC剖面

语法:P=iccread(filename)

im2java2d 将图像转换为Java缓冲图像

语法:jimage=im2java2d(I) \ jimage=im2java2d(X,MAP)

imview 在图像与蓝旗中显示图像

语法:imview(I) \  imview(RGB) \ imview(X,map) \imview(I,range) \ imview(filename) \ imview(....'InitialMagnification',initial_mag) \ h=imview(...)  \  imview close all

ippl 检查IPPL的存在

语法:TF=ippl \ [TF B]=ippl

iptdemos 显示图像处理工具箱中的索引图像

lab2double、lab2unit16、lab2unit8 将L*a*b数据分别转换为双精度、16位数据、8位数据

makecform 创造一个色彩转换结构

poly2mask 把多边形区域转换成mask区域

语法:BW=poly2mask(x,y,m,n)

unitlut 查找表中A像素值

语法:B=unitlut(A,LUT)

xyz2double、xyz2unit16 将颜色数据从XYZ转换到双精度、16进制。

语法:xyzd=xyz2double(XYZ) \ xyz16=xyz2unit16(xyz)