matlab静态图像分割及边缘检测与图像压缩及编码
- 格式:doc
- 大小:1.03 MB
- 文档页数:16
MATLAB图像处理基础教程第一章:MATLAB图像处理简介MATLAB(Matrix Laboratory)是一种强大的数值计算和数据可视化软件,广泛应用于各个领域,包括图像处理。
图像处理是一门研究如何对数字图像进行分析、增强、重建和压缩的学科。
本教程将引导读者逐步了解MATLAB图像处理的基本概念和技术。
第二章:MATLAB图像的读取与显示在MATLAB中,可以使用imread函数读取不同格式的图像文件,并使用imshow函数显示图像。
此外,还可以使用imfinfo函数获取图像的详细信息,如分辨率、颜色空间和位深度等。
第三章:图像的灰度处理灰度处理是一种常见的图像预处理方法。
通过将彩色图像转换为灰度图像,可以减少图像的数据量,简化图像处理的复杂性。
在MATLAB中,可以使用rgb2gray函数将彩色图像转换为灰度图像,并使用imhist函数查看灰度图像的直方图。
第四章:图像的滤波处理滤波是一种常用的图像处理操作,用于对图像进行平滑、增强或去噪。
MATLAB提供了各种滤波函数,如均值滤波、中值滤波和高斯滤波等。
可以根据具体需求选择合适的滤波方法,并使用imfilter函数进行滤波处理。
第五章:图像的二值化处理图像的二值化是将图像转换为黑白两色的过程,常用于物体检测、识别和分割等应用。
在MATLAB中,可以使用im2bw函数将灰度图像转换为二值图像,并可以调整阈值来控制二值化的效果。
第六章:图像的几何变换几何变换是一种常见的图像处理操作,用于对图像进行旋转、缩放、平移和翻转等操作。
MATLAB提供了imrotate、imresize、imtranslate和flip函数等实现各种几何变换。
通过组合这些函数,可以实现复杂的图像变换。
第七章:图像的特征提取图像的特征提取是图像处理中的重要步骤,用于从图像中提取出具有代表性的信息。
在MATLAB中,可以使用各种特征提取函数,如imgradient、imhistogram和imcontour等。
学号14102500892光电图像处理实验报告实验三:静态图像分割与边缘检测作者肖剑洪专业电子科学与技术学院物理与电子学院指导老师王晓明完成时间2013.12.2实验三静态图像分割与边缘检测一、实验目的1.学习常用的图像分割与边缘检测方法,并通过实验使学生体会一些主要的分割算子对图像处理的效果,以及各种因素对分割效果的影响;2.观察图像分割的结果,产生对所讲述理论知识的直观认识,加深对图像分割与边缘检测相关理论知识的理解。
3.掌握常用图象分割及边缘检测方法的算法设计及编程实现;4.学会使用MATLAB软件中关于图像分割与边缘检测的函数;二、实验设备联想图像处理工作站三、实验内容及要求1.自己编写M-function实现图像阈值分割算法,要求该程序能对256级灰度图像进行处理,显示处理前、后图像;2.自己编写M-function实现利用Sobel算子进行图像边缘检测的算法,并对图像进行检测,显示原图像、处理后的图像。
3.调用Matlab自带的图像处理函数,用不同的算子对图像进行分割、边缘检测,比较结果。
4.结合以上实验内容,使用ICETECK-DM642-IDK-M实验系统进行相应的动态视频图像分割及边缘检测,观察结果。
四、实验原理1.图像分割图像分割是将图像划分成若干个互不相交的小区域的过程,小区域是某种意义下具有共同属性的像素的连通集合。
图像分割有三种不同的途径:区域法、边界法、边缘法。
最常用的是灰度阈值化处理进行的图像分割:(,)(,)255(,)f x y T g x y f x y T⎧<⎪=⎨≥⎪⎩域值T 的选取直接影响分割的效果! (1)直方图双峰域值选择 (2)迭代域值选择迭代思想:选择一个初始估计值,通过某种策略不断改进(调制)新的估计值,直到满足给定的准则。
迭代步骤:⑴选择一个初值估计值T ,一般为最大灰度值和最小灰度值的中间值; ⑵使用域值T 分割图像,得到两组像素G1(>=T)和G2(<T ); ⑶计算两组像素的灰度均值:μ1和μ2; ⑷计算新域值T =(μ1和μ2)/2;⑸重复步骤2~4,直到新域值的改变量小于预先定义的参数e 。
MATLAB图象压缩预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制1.图像压缩的概念减少表示数字图像时需要的数据量2.图像压缩的基本原理去除多余数据.以数学的观点来看,这一过程实际上就是将二维像素阵列变换为一个在统计上无关联的数据集合图像压缩是指以较少的比特有损或无损地表示原来的像素矩阵的技术,也称图像编码.图像数据之所以能被压缩,就是因为数据中存在着冗余。
图像数据的冗余主要表现为:(1)图像中相邻像素间的相关性引起的空间冗余;(2)图像序列中不同帧之间存在相关性引起的时间冗余;(3)不同彩色平面或频谱带的相关性引起的频谱冗余。
3数据压缩的目的就是通过去除这些数据冗余来减少表示数据所需的比特数。
由于图像数据量的庞大,在存储、传输、处理时非常困难,因此图像数据的压缩就显得非常重要。
信息时代带来了“信息爆炸”,使数据量大增,因此,无论传输或存储都需要对数据进行有效的压缩。
在遥感技术中,各种航天探测器采用压缩编码技术,将获取的巨大信息送回地面。
图像压缩是数据压缩技术在数字图像上的应用,它的目的是减少图像数据中的冗余信息从而用更加高效的格式存储和传输数据。
4、图像压缩基本方法图像压缩可以是有损数据压缩也可以是无损数据压缩。
对于如绘制的技术图、图表或者漫画优先使用无损压缩,这是因为有损压缩方法,尤其是在低的位速条件下将会带来压缩失真。
如医疗图像或者用于存档的扫描图像等这些有价值的内容的压缩也尽量选择无损压缩方法。
有损方法非常适合于自然的图像,例如一些应用中图像的微小损失是可以接受的(有时是无法感知的),这样就可以大幅度地减小位速。
从压缩编码算法原理上可以分为以下3类:(1)无损压缩编码种类哈夫曼(Huffman)编码,算术编码,行程(RLE)编码,Lempel zev编码。
(2)有损压缩编码种类预测编码,DPCM,运动补偿;频率域方法:正交变换编码(如DCT),子带编码;空间域方法:统计分块编码;模型方法:分形编码,模型基编码;基于重要性:滤波,子采样,比特分配,向量量化;(3)混合编码。
Matlab中的图像分割与边缘检测方法引言图像处理是一门研究如何对数字图像进行处理、分析、改进和理解的学科。
图像分割与边缘检测在图像处理中占据着重要的地位。
图像分割是将图像划分为多个具有语义意义的区域或对象的过程,而边缘检测则是找到图像中不连续的区域边界。
Matlab作为一种强大的软件工具,提供了丰富的图像处理函数和工具箱,本文将探讨在Matlab中应用的图像分割与边缘检测方法。
一、图像分割方法1. 基于阈值的分割基于阈值的分割是一种简单但有效的方法。
该方法将图像像素的灰度值与预设的阈值进行比较,根据比较结果将像素分配到不同的区域。
在Matlab中,可以使用imbinarize和graythresh函数来实现基于阈值的分割。
2. 区域增长法区域增长法基于像素之间的相似性来进行分割。
该方法从种子像素开始,通过判断邻域像素与种子像素的相似度来不断扩展区域。
在Matlab中,可以使用imsegf和regiongrowing函数来实现区域增长法。
3. 聚类方法聚类方法将图像像素分为多个类别,每个类别代表一个区域。
该方法通常使用聚类算法,比如k-means算法或者模糊c-均值算法。
在Matlab中,可以使用kmeans和fcm函数来实现聚类方法。
4. 模型驱动法模型驱动法基于数学模型来描述图像中的区域。
该方法通过定义一个能够衡量图像中区域特征的能量函数,并通过优化算法来最小化能量函数,从而得到分割结果。
在Matlab中,可以使用activecontour和chanvese函数来实现模型驱动法。
二、边缘检测方法1. Sobel算子Sobel算子是一种经典的边缘检测算子。
其基本思想是通过计算像素与其周围像素之间的差异来检测边缘。
在Matlab中,可以使用imgradient和imgradientxy函数来实现Sobel算子。
2. Canny算子Canny算子是一种广泛使用的边缘检测算子。
它利用高斯平滑、梯度计算、非极大值抑制和双阈值法来检测边缘。
(1) file_name='baboon.bmp';H=imread(file_name);H=double(H);Grgb=0.2990*H(:,:,1)+0.5870*H(:,:,2)+0.1140*H(:,:,3); NbColors=255;%对矩阵进行量化编码G=wcodemat(Grgb,NbColors);%gray线性的灰阶色调map2=gray(NbColors);%建立图形窗口1figure(1);%建立图像Gimage(G);%应用调色板colormap(map2);title('原图像的灰度图');%显示workplace的变量的详细信息whos('G');%转换成为灰度级索引图像%dwt2单尺度二维离散小波变换[CA1,CH1,CV1,CD1]=dwt2(G,'bior3.7');%从分解系数中提取近似和细节% upcoef2二维系数的直接小波重构A1=upcoef2('a',CA1,'bior3.7',1);H1=upcoef2('h',CH1,'bior3.7',1);V1=upcoef2('v',CV1,'bior3.7',1);D1=upcoef2('d',CD1,'bior3.7',1);%第二幅图像%显示近似和细节figure (2);colormap(map2);subplot(2,2,1);%对矩阵进行量化编码image(wcodemat(A1,192));title('近似A1');subplot(2,2,2);image(wcodemat(H1,192));title('水平细节H1');subplot(2,2,3);image(wcodemat(V1,192));title('垂直细节V1');subplot(2,2,4);image(wcodemat(D1,192));title('对角细节D1');%对图像进行多尺度分解[C,S]=wavedec2(G,2,'bior3.7');%提取分解后的近似和细节系数%提取一维小波变换低频系数CA2=appcoef2(C,S,'bior3.7',2);%提取小波变换高频系数[CH2,CV2,CD2]=detcoef2('all',C,S,2); [CH1,CV1,CD1]=detcoef2('all',C,S,1); %从系数C重构第二层近似A2=wrcoef2('a',C,S,'bior3.7',2);H1=wrcoef2('h',C,S,'bior3.7',1);V1=wrcoef2('v',C,S,'bior3.7',1);D1=wrcoef2('d',C,S,'bior3.7',1);H2=wrcoef2('h',C,S,'bior3.7',2);V2=wrcoef2('v',C,S,'bior3.7',2);D2=wrcoef2('d',C,S,'bior3.7',2);%第三幅图像%显示多尺度分解的结果figure (3);colormap(map2);subplot(2,4,1);image(wcodemat(A1,192));title('近似A1');subplot(2,4,2);image(wcodemat(H1,192));title('水平细节H1');subplot(2,4,3);image(wcodemat(V1,192));title('垂直细节V1');subplot(2,4,4);image(wcodemat(D1,192));title('对角细节D1');subplot(2,4,5);image(wcodemat(A2,192));title('近似A2');subplot(2,4,6);image(wcodemat(H2,192));title('水平细节H2');subplot(2,4,7);image(wcodemat(V2,192));title('垂直细节V2');subplot(2,4,8);image(wcodemat(D2,192));title('对角细节D2');%第四幅图像%从多尺度分解后的系数重构原始图像并显示结果G0=waverec2(C,S,'bior3.7');%建立图形窗口4figure (4);%建立图像G0image(G0);%应用调色板colormap(map2);%绘制调色板的内容colorbar;whos('G0')(2)file_name=('bab.bmp');H=imread(file_name);H=double(H);ca=0.2990*H(:,:,1)+0.5870*H(:,:,2)+0.1140*H(:,:,3);NbColors=255;G=wcodemat(ca,NbColors);map2=gray(NbColors);figure(1);image(G);colormap(map2);title('原图像的灰度图');whos('G');%对图像进行多尺度二维小波分解[c,s]=wavedec2(G,2,'bior3.7');ca1=appcoef2(c,s,'bior3.7',1);ch1=detcoef2('h',c,s,1);cv1=detcoef2('v',c,s,1);cd1=detcoef2('d',c,s,1);%对各频率进行小波重构a1=wrcoef2('a',c,s,'bior3.7',1);h1=wrcoef2('h',c,s,'bior3.7',1);v1=wrcoef2('v',c,s,'bior3.7',1);d1=wrcoef2('d',c,s,'bior3.7',1);G1=[a1,h1;v1,d1];figure(2);image(G1);colormap(map2);axis square;title('分解后低频和高频信息') whos('G1');ca1=appcoef2(c,s,'bior3.7',1);ca1=wcodemat(ca1,440,'mat',1);ca2=0.6*ca1;figure(3);image(ca2);colormap(map2);title('低频压缩图像');whos('ca2');ca3=appcoef2(c,s,'bior3.7',2);ca3=wcodemat(ca3,440,'mat',0); ca4=0.5*ca3;figure(4);image(ca4);title('二层分解后低频压缩图像'); colormap(map2);whos('ca4');。
MATLAB中的图像压缩和编码方法图像压缩和编码是数字图像处理的重要领域,在各种图像应用中起着至关重要的作用。
在本文中,我们将探讨MATLAB中的图像压缩和编码方法,包括无损压缩和有损压缩,并介绍其中的一些经典算法和技术。
一、图像压缩和编码概述图像压缩是指通过一定的算法和技术来减少图像数据的存储量或传输带宽,以达到节约存储空间和提高传输效率的目的。
而图像编码则是将原始图像数据转换为一系列二进制编码的过程,以便存储或传输。
图像压缩和编码通常可以分为无损压缩和有损压缩两种方法。
无损压缩是指压缩后的数据可以完全还原为原始图像数据,不会引入任何失真或变化。
常见的无损压缩算法有Run-Length Encoding (RLE)、Lempel-Ziv-Welch (LZW)、Huffman编码等。
这些算法通常针对图像中的冗余数据进行编码,如重复的像素值或相似的图像区域。
有损压缩则是在保证一定程度的视觉质量下,通过舍弃或近似原始图像数据来减小存储或传输的数据量。
常见的有损压缩算法有JPEG、JPEG2000、GIF等。
这些算法通过离散余弦变换(DCT)、小波变换或颜色量化等方法,将图像数据转换为频域或颜色空间的系数,并通过量化、编码和压缩等步骤来减小数据量。
二、无损压缩方法1. Run-Length Encoding (RLE)RLE是一种简单高效的无损压缩算法,通过计算连续重复像素值的数量来减小数据量。
在MATLAB中,可以使用`rle`函数实现RLE编码和解码。
例如,对于一幅图像,可以将连续的像素值(如白色)编码为重复的个数,然后在解码时根据重复的个数恢复原始像素值。
2. Lempel-Ziv-Welch (LZW)LZW是一种字典压缩算法,通过将图像中连续的像素序列映射为一个短代码来减小数据量。
在MATLAB中,可以使用`lzwencode`和`lzwdecode`函数实现LZW 编码和解码。
例如,对于一段连续的像素序列,可以将其映射为一个短代码,然后在解码时根据代码恢复原始像素序列。
MATLAB边缘检测代码边缘检测是图像处理中常用的技术,用于识别图像中物体的轮廓。
在MATLAB中,我们可以使用不同的方法进行边缘检测,例如Sobel算子、Canny算子等。
本文将介绍MATLAB中常用的边缘检测方法,并给出相应的代码示例。
1. Sobel算子Sobel算子是一种基于梯度的边缘检测算法,通过计算图像灰度值的一阶导数来识别边缘。
在MATLAB中,我们可以使用edge函数来实现Sobel算子。
img = imread('image.jpg'); % 读取图像gray_img = rgb2gray(img); % 将彩色图像转换为灰度图像edge_img = edge(gray_img, 'sobel'); % 使用Sobel算子进行边缘检测imshow(edge_img); % 显示结果上述代码首先读取一张彩色图像,并将其转换为灰度图像。
然后使用edge函数对灰度图像进行Sobel边缘检测,并将结果显示出来。
2. Canny算子Canny算子是一种基于多阶段处理的边缘检测算法,它能够有效地抑制噪声并提取出清晰、准确的边缘。
在MATLAB中,我们同样可以使用edge函数来实现Canny算子。
img = imread('image.jpg'); % 读取图像gray_img = rgb2gray(img); % 将彩色图像转换为灰度图像edge_img = edge(gray_img, 'canny'); % 使用Canny算子进行边缘检测imshow(edge_img); % 显示结果上述代码与Sobel算子的示例代码类似,只是将edge函数的第二个参数设置为'canny'来使用Canny算子进行边缘检测。
3. Laplacian算子Laplacian算子是一种基于二阶导数的边缘检测算法,它能够检测出图像中的灰度变化区域。
实验作业7分别用区域编码和阈值编码方法实现图像压缩,用8×8DCT变换,保留50%的大系数,并对解码图像进行比较。
要求:DCT要自己实现,不能用matlab中的DCT函数区域编码程序代码:clear;I=imread('d:\3.jpg');I=double(rgb2gray(I));figure(1);imshow(uint8(I));title('原图像');Y=zeros(8,8);for i=1:8for j=1:8if i==1Y(i,j)=sqrt(1/8);elseY(i,j)=sqrt(2/8)*cos((pi*(2*(j-1)+1)*(i-1))/16);endendends=blkproc(I,[8 8],'P1*x*P2',Y,Y'); figure(2);imshow(uint8(s));for j=1:8for i=1:8if j<=8-i+1a(i,j)=1;elsea(i,j)=0;end;end;end;s=blkproc(s,[8 8],'P1.*x',a); figure(3);imshow(uint8(s));s=blkproc(s,[8 8],'P1*x*P2',Y',Y); figure(4);imshow(uint8(s));title('经过压缩处理的图像')运行结果:阈值编码程序代码clear;I=imread('d:\3.jpg'); I=rgb2gray(I); imshow(uint8(I)); title('原图像'); I=double(I); for i=1:8 for j=1:8 if (i==1)Y(i,j)=sqrt(1/8); elseY(i,j)=sqrt(2/8)*cos((i-1)*(2*j-1)*pi/(2*8)); end; end; end; s=blkproc(I,[8 8],'P1*x*P2',Y,Y'); a=ones(8,8); b=reshape(Y,1,64); midvalue=median(b); for i=1:8 for j=1:8if(abs(Y(i,j))<midvalue) a(i,j)=0; end; end; end;s=blkproc(s,[8 8],'P1.*x',a); s=blkproc(s,[8 8],'P1*x*P2',Y',Y); figure(2); imshow(uint8(s));title('被与之编码方式压缩的图像');运行结果:心得体会:由于第八章内容上课听的不是很明白,所以作业题拿到之后不知道怎么做,重新把第八章看了一遍,可是很多地方看了好久好多次还是不明白其原理,就像这次所涉及的DCT (虽然会做作业,但是实在是不理解),区域编码,门限编码,都是不明白什么意思!后来网上搜罗资料,看了颇久,请教了同学,才慢慢知道是什么一回事,做这题目的时候,遇到过不知道怎么分块的问题,后来也是同学告诉有个blkproc 的函数可以用,才使到程序精简化。
摘要随着时代的发展,人们可以通过Internet获取大量的信息。
这些信息中包含着大量的图像信息,它们占据了很大的数据量,这给信息的存储和传输带来了极大的挑战。
图像压缩的目的就是用尽量少的字节来表示图像,并且要求重建图像具有较好的质量。
利用图像压缩, 可以减轻图像存储和传输的负担, 使得图像在网络上实现快速传输和实时处理成为现实。
通常,图像中局部区域的像素是高度相关的,因此可以利用先前像素的有关知识来对当前像素的灰度值进行估计,这就是预测。
本文介绍了数字图像的预测压缩编码。
首先,将图像分成8×8大小的像素块。
接着,对每一像素块均采用AR模型,利用Burg算法确定最佳线性预测系数。
然后,通过线性差分方程计算得到预测值,最后对实际像素值和预测值之间的差值量化后进行算术编码。
从而实现数字图像的预测压缩编码。
本文采用MATLAB提供的图形用户界面工具对三幅典型的标准灰度图像进行了预测压缩编码仿真,并用客观标准和主观标准综合评价重建图像的质量。
仿真结果表明:重建图像与原始图像几乎没有任何差异,能够满足人们的视觉需求。
另外,数据压缩比较高且峰值信噪比均在20dB-40dB之间。
因此,采用MATLAB实现数字图像的预测压缩编码是一种较好的压缩编码方法,能够在实际中得到广泛的应用。
关键词:图像压缩,线性预测,算术编码,MATLAB,图形用户界面AbstractPeople can obtain a great amount of information from the Internet with the development of times and it includes a great amount of image information. The image information occupies huge data and it gives great challenge to information storage and transmission. The aim of image compression is to donate image with bytes as few as possible. The reconstructed image is of relatively good quality is also required. The burden of image storage and transmission can be alleviated by image compression and it turns fast transmission and real-time process of an image in internet into reality.Generally, the pixel in the partial region of an image is highly correlated. So the correlated knowledge of foregoing pixel can be used to estimate the gray value of current pixel. This is called prediction. The paper introduces the predictive compression coding. Firstly, the image is divided into several sub-images of size 8×8. Secondly, AR model is used to each sub-image and then Burg algorithm is used to determine the optimum linear prediction coefficient. Thirdly, linear differential equation is used to calculate the predictive value. Finally, the difference between real pixel value and predictive value is quantized before doing arithmetic coding. Then the predictive compression coding of a digital image is realized.The paper simulate the predictive compression coding as to three typical and standard gray images by using graphic user interface tools offered by MATLAB. Objective and subjective standard is adopted to evaluate the quality of reconstructed image.The results of simulation demonstrate that there is no difference between reconstructed image and original image and reconstructed image can satisfy human visual requirements. Additionally, compression ratio is relatively high and peak signal-to-noise ratio is between 20dB to 40dB. Therefore, the realization of predictive compression coding using MATLAB is a relatively good method and it can be widely used in practice.Key words: image compression, linear prediction, arithmetic coding, MATLAB, graphical user interface目录摘要 ......................................................................................................................... Abstract.. (I)第1章引言 0图像压缩的课题来源与发展现状 0课题来源 0发展现状 (1)论文结构 (2)第2章数字图像概述与图像压缩评价标准 (3)数字图像文件存储 (3)数字图像的文件格式 (3)图像压缩的评价标准 (4)客观保真度准则 (4)主观保真度准则 (5)第3章预测编码 (6)脉冲编码调制 (6)差分脉冲编码调制 (7)第4章AR模型 (9)时间序列的概率模型 (9)时间序列的参数表征 (9)平稳过程 (10)纯随机过程 (10)自回归过程(AR模型) (10)AR模型的参数估计 (11)AR模型参数的最小二乘估计 (11)AR模型参数估计的格型算法 (12)AR模型阶数p的确定 (16)第5章算术编码 (18)一般算术编码 (18)算术编码过程 (18)算术解码过程 (19)改进的算术编码 (20)算术编码过程 (20)小结 (21)第6章MATLAB概述及仿真结果 (22)MATLAB概况 (22)MATLAB的语言特点 (22)MATLAB图形用户界面设计 (23)图形用户界面的创建与组成 (23)图形用户界面编程 (25)图形用户界面编程过程 (27)MATLAB仿真结果 (28)第7章结论及展望 (32)结论 (32)展望 (32)致谢 (33)参考文献 (35)附录 (36)第1章 引 言图像压缩的课题来源与发展现状课题来源21世纪,人类已经进入信息化时代,计算机在处理各种信息中发挥着巨大的作用。
图像分割Matlab代码图像分割Matlab代码 (一)图像边缘检测不同方法比较将Roberts、Sobel、Prewitt、LOG、Canny算子等经典图像分割算法对灰度图像分割的结果进行比较。
Matlab 代码如下:%% 图像边缘检测不同方法比较% Roberts、Sobel、Prewitt、LOG、Canny算子对灰度图像分割的结果比较clc;clear all;close all;f=imread('8_256_lena.bmp','bmp'); subplot(2,3,1);subimage(f);title('原始图像');[g, t]=edge(f,'roberts',[],'both'); subplot(2,3,2);subimage(g);title('Roberts算子对图像分割的结果');[g, t]=edge(f,'sobel',[],'both'); subplot(2,3,3);subimage(g);title('Sobel算子对图像分割的结果');[g, t]=edge(f,'prewitt',[],'both'); subplot(2,3,4);subimage(g);title('Prewitt算子对图像分割的结果');[g, t]=edge(f,'log'); subplot(2,3,5);subimage(g);title('LOG算子对图像分割的结果'); [g, t]=edge(f,'canny'); subplot(2,3,6);subimage(g);title('Canny算子对图像分割的结果');(二)区域生长法分割图像区域生长法分割图像,matlab代码如下: %% 区域生长法分割图像clc;clear all;close all;f=imread('rice_1.bmp','bmp'); % f=imread('rice.png','png'); %f=imread('8_256_lena.bmp','bmp'); subplot(1,2,1);subimage(f);%选择三个种子点seedx=[63, 10, 85];%rice图的生长点seedy=[30, 56, 60];% seedx=[100, 150, 227];%lena图的生长点% seedy=[56, 130, 189];hold onplot(seedx,seedy,'gs','linewidth',1); title('原始图像及种子点位置');f=double(f);markerim=f==f(seedy(1),seedx(1)); for i=2:length(seedx)markerim=markerim|(f==f(seedy(i),seedx(i)));end%3个种子点区域的阈值thresh=[12,6,12];maskim= zeros(size(f));for i=1:length(seedx)g=abs(f-f(seedy(i),seedx(i)))<=thresh(i);maskim=maskim|g;end[g,nr]=bwlabel(imreconstruct(markerim,maskim),8); % g=mat2gray(g);%以灰度级显示,注释掉此行以二值图像显示subplot(1,2,2);subimage(g);title('三个种子点区域生长分割结果');(三)迭代阈值选择法二值化图像与Otsu阈值选择法二值化图像比较迭代阈值选择法二值化图像与Otsu阈值选择法二值化图像比较的matlab代码如下:%% 迭代阈值选择法二值化图像与Otsu阈值选择法二值化图像比较 clc;clear all;close all;f=imread('8_256_lena.bmp','bmp'); subplot(2,2,1);subimage(f);title('原始图像');f=double(f);T=(min(f(:))+max(f(:)))/2; done=false;i=0;while ~doner1=find(f<=T);r2=find(f>T);Tnew=(mean(f(r1))+mean(f(r2)))/2;done=abs(Tnew-T)<1;T=Tnew;i=i+1;endf(r1)=0;f(r2)=1;subplot(2,2,2);subimage(f);title('迭代阈值二值化图像图像');f=imread('8_256_lena.bmp','bmp');subplot(2,2,3);subimage(f);title('原始图像');T=graythresh(f);g=im2bw(f,T);subplot(2,2,4);subimage(g);title('Otsu方法二值化图像');。
学号14102500892 光电图像处理实验报告实验三:静态图像分割与边缘检测作者肖剑洪专业电子科学与技术学院物理与电子学院指导老师王晓明完成时间2013.12.2实验三静态图像分割与边缘检测一、实验目的1.学习常用的图像分割与边缘检测方法,并通过实验使学生体会一些主要的分割算子对图像处理的效果,以及各种因素对分割效果的影响;2.观察图像分割的结果,产生对所讲述理论知识的直观认识,加深对图像分割与边缘检测相关理论知识的理解。
3.掌握常用图象分割及边缘检测方法的算法设计及编程实现;4.学会使用MATLAB软件中关于图像分割与边缘检测的函数;二、实验设备联想图像处理工作站三、实验内容及要求1.自己编写M-function实现图像阈值分割算法,要求该程序能对256级灰度图像进行处理,显示处理前、后图像;2.自己编写M-function实现利用Sobel算子进行图像边缘检测的算法,并对图像进行检测,显示原图像、处理后的图像。
3.调用Matlab自带的图像处理函数,用不同的算子对图像进行分割、边缘检测,比较结果。
4.结合以上实验内容,使用ICETECK-DM642-IDK-M实验系统进行相应的动态视频图像分割及边缘检测,观察结果。
四、实验原理1.图像分割图像分割是将图像划分成若干个互不相交的小区域的过程, 小区域是某种意义下具有共同属性的像素的连通集合。
图像分割有三种不同的途径:区域法、边界法、边缘法。
最常用的是灰度阈值化处理进行的图像分割:(,)(,)255(,)f x y T g x y f x y T⎧<⎪=⎨≥⎪⎩域值T 的选取直接影响分割的效果! (1)直方图双峰域值选择 (2)迭代域值选择迭代思想:选择一个初始估计值,通过某种策略不断改进(调制)新的估计值,直到满足给定的准则。
迭代步骤:⑴选择一个初值估计值T ,一般为最大灰度值和最小灰度值的中间值; ⑵使用域值T 分割图像,得到两组像素G1(>=T)和G2(<T ); ⑶计算两组像素的灰度均值:μ1和μ2; ⑷计算新域值T =(μ1和μ2)/2;⑸重复步骤2~4,直到新域值的改变量小于预先定义的参数e 。
(3)最大类间方差法(Otsu ) 思想:⑴将图像中目标和背景看作分属不同类别的像素组成;⑵判别分析法的目标是确定域值使分属不同类别的像素的类间方差最大。
1.边缘检测灰度或结构等信息的突变出称为边缘,在空间域借助微分算子通过卷积来完成,而空域的微分在离散数字图像可以采用差分来近似。
基于一阶导数的边缘检测算子有Robert 算子、Sobel 算子、Prewitt 算子等,基于二阶导数的边缘检测算子有Laplace 算子,LOG 算子是一种改进的方式。
Sobel 算子为一对模板: 五、实验步骤1.根据实验内容的要求在MATLAB 软件中编写相应程序;1)灰度阈值分割实验(使用迭代阈值选择方法) 2)使用Sobel 算子的边缘检测实验3)调用Matlab 已有的图像处理函数,对图像进行分割和边缘检测 a .调用边缘检测函数edge ,并与自己编写的函数运行结果进行比较;b .用其他边缘检测算子和分割方法对图像进行处理,并对结果进行比较。
2.调试运行程序,并记录结果。
3.结合以上实验内容,使用ICETECK-DM642-IDK-M 实验系统进行相应的动态视频图像增强处理,观察结果。
4.完成实验报告。
六、实验程序清单和实验结果及分析1.图像分割clear all, close all;H= imread('f:/1.jpg'); I=rgb2gray(H); figure (1),imshow(I)-1 -2 -1 00 0 121-1 0 1 -2 0 2 -11figure(2); imhist(I)T=120/255;Ibw1 = im2bw(I,T); %选择阈值T=120/255对图像二值化;figure(3);subplot(1,2,1), imshow(Ibw1);T=graythresh(I); %采用Otsu方法计算最优阈值T对图像二值化;L = uint8(T*255)Ibw2 = im2bw(I,T);subplot(1,2,2), imshow(Ibw2);(2)迭代域值选择clc;clear all;H=imread('f:/1.jpg');I=rgb2gray(H);I=double(I)/255;k1=(max(max(I))+min(min(I)))/2;[rows cols]=size(I);count1=0;count2=0;for i=1:rowsfor j=1:colsif I(i,j)<k1count1=count1+1;G1(count1).I=I(i,j);elsecount2=count2+1;G2(count2).I=I(i,j);endendendk2=(mean(mean([G1.I]))+mean(mean([G2.I])))/2;while(abs(k2-k1)>(5/255))k1=k2;count1=0;count2=0;for i=1:rowsfor j=1:colsif I(i,j)<k1count1=count1+1;G1(count1).I=I(i,j);elsecount2=count2+1;G2(count2).I=I(i,j);endendendk2=(mean(mean([G1.I]))+mean(mean([G2.I])))/2;endfigure(1);imshow(I);figure(2);II=im2bw(I,k2);imshow(II);2.边缘检测clear all, close all;H=imread('f:/1.jpg');I=rgb2gray(H);BW1 = edge(I,'sobel');BW2 = edge(I,'canny');BW3 = edge(I,'prewitt');BW4 = edge(I,'roberts');BW5 = edge(I,'log');figure(1), imshow(I), title('Original Image');figure(2), imshow(BW1), title('sobel');figure(3), imshow(BW2), title('canny');figure(4), imshow(BW3), title('prewitt');figure(5), imshow(BW4), title('roberts');figure(6), imshow(BW5), title('log');八、实验思考题1.小结一下本实验所用的边缘检测方法。
答:边缘检测的基本算子有:一阶::Roberts Cross 算子,Prewitt 算子,Sobel 算子, Kirsch 算子,罗盘算子;二阶: Marr-Hildreth ,在梯度方向的二阶导数过零点,Canny 算子,Laplacian 算子 Canny 算子(或者这个算子的变体)是最常用的边缘检测方法。
在 Canny 创造性的工作中,他研究了设计一个用于边缘检测最优预平滑滤波器中的问题,后来他说明这个滤波器能够很好地被一阶高斯导数核优化。
另外 Canny 引入了非最大抑制概念,它是说边缘定义为在梯度方向具有最大梯度值的点。
在一个离散矩阵中,非最大抑制阶梯能够通过一种方法来实现,首先预测一阶导数方向、然后把它近似到45度的倍数、最后在预测的梯度方向比较梯度幅度。
2.基于微分方法的边缘检测算法的依据是什么?答:一般来说不同区域的交界处构成边缘,同一区域内像素的灰度差较小,而不同区域像素灰度差较大,因此用微分可以很好地检测满足这种假设的区域边界。
学号14102500892 光电图像处理实验报告实验四:图像压缩与编码作者肖剑洪专业电子科学与技术学院物理与电子学院指导老师王晓明完成时间2013.12.2实验四图像压缩与编码一、实验目的1.了解图像压缩编码原理;2.掌握常用的图像压缩算法及编程实现;3.学会使用MATLAB软件中关于图像压缩编码的函数;二、实验设备联想图像处理工作站三、实验内容及要求1.自己编写M-function实现图像无损压缩算法,要求该程序能对256级灰度图像进行压缩数据,计算压缩算法的性能;2.自己编写M-function实现图像有损压缩算法,要求该程序能对256级灰度图像进行压缩数据,计算压缩算法的性能;3.调用Matlab自带的图像处理函数,用不同的算法对图像进行压缩编码,比较结果。
四、实验原理图像压缩与编码是在满足一定保真度的要求下,对图像数据的进行变换、编码和压缩,去除冗余数据减少表示数字图像时需要的数据量,以便于图像的存储和传输,即以较少的数据量有损或无损地表示原来的像素矩阵的技术。
图像压缩编码可分为两类:一类压缩是可逆的,即从压缩后的数据可以完全恢复原来的图像,信息没有损失,称为无损压缩编码;另一类压缩是不可逆的,即从压缩后的数据无法完全恢复原来的图像,信息有一定损失,称为有损压缩编码。
传统数据压缩方法的分类:无损压缩包括统计编码(Huffman编码,Shannon编码,游程编码,算术编码等)和轮廓编码;有损压缩包括预测编码(脉冲编码调制PCM,Differential PCM,AdaptiveDPCM等)、变换编码(DFT,DCT,KLT,WHT,小波变换等)和混合编码。
统计编码是根据信源的概率分布特性,分配具有惟一可译性的可变长码字,降低平均码字长度,以提高信息的传输速度,节省存储空间。
其基本原理是在信号概率分布情况已知的基础上,概率大的信号对应的码字短,概率小的信号对应的码字长,这样就降低了平均码字长度。
其中Huffman编码具体的编码方法为:①把输入元素按其出现概率的大小顺序排列起来,然后把最末两个具有最小概率的元素之概率加起来;②把该概率之和同其余概率由大到小排队,然后再把两个最小概率加起来,再重新排队;③重复②,直到最后只剩下两个概率为止。
变换编码的基本原理是通过数学变换可以改变信号能量的分布,从而压缩信息量。
以傅里叶变换的概念说明合理的变换可以改变信号能量分布的基本原理。
在变换编码中有以下二个问题值得注意:图像变换方法的选取;子图像大小的选取。
传统的DFT,DCT,KLT和经典小波变换等变换编码在图像变换后会产生浮点数,因而必须对变换后的数据进行量化处理,这样就产生不同程度的失真。