数字图像处理上机实验三

合集下载

数字图像处理实验报告Word版

数字图像处理实验报告Word版

《数字图像处理上机》实验报告班级:电信1101姓名:XXXXXX学号:0703110107数字图像处理上机实验1、实验目的了解matlab软件/语言,学会使用matlab的图像处理工具箱(Image Processing Toolbox),使学生初步具备使用该软件处理图像信息的能力,并能够利用该软件完成本课程规定的其他实验和作业。

熟悉常用的图像文件格式与格式转换;熟悉图像矩阵的显示方法(灰度、索引、黑白、彩色);熟悉图像矩阵的格式转换。

,学会使用MatLab对图像作滤波处理,使学生有机会掌握滤波算法,体会滤波效果。

了解几种不同滤波方式的使用和使用的场合,培养处理实际图像的能力.2、实验要求学生应当基本掌握matlab的操作,掌握matlab图像处理工具箱中最常用的函数用法。

练习图像读写命令imread和imwrite并进行图像文件格式之间的转换。

学生应当完成对于给定图像+噪声,使用平均滤波器、中值滤波器对不同强度的高斯噪声和椒盐噪声,进行滤波处理;能够正确地评价处理的结果;能够从理论上作出合理的解释。

3、实验内容及步骤1、图像的显示与格式转换(1)学习matlab的基本操作;(2)使用imread函数读入图像;(3)使用figure函数创建窗口;(4)使用image或imshow函数显示图像;(5)使用colorbar函数在图像的右侧显示图像的亮度条。

2、图像的滤波(1) 考察平均滤波器对高斯噪声污染的图象去噪效果;(2) 考察中值滤波器对高斯噪声污染的图象去噪效果;(3) 考察平均滤波器对椒盐噪声污染的图象去噪效果;(4) 考察中值滤波器对椒盐噪声污染的图象去噪效果。

(5) 考察滤波器模板大小对平均滤波器滤波效果的影响;(6) 考察滤波器模板大小对中值滤波器滤波效果的影响;3、图像的频域变换在Matlab workspace中生成一幅大小为256×256像素的8位灰度图, 背景为黑色,中心有一个宽80像素高40像素的白色矩形。

数字图像处理上机实验三学习资料

数字图像处理上机实验三学习资料

数字图像处理上机实验三医学图像处理实验三1、计算图像的梯度,梯度值和梯度角。

I=imread('C:\Users\Administrator\Desktop\cat.jpg'); B=rgb2gray(I);C=double(B);e=1e-6;%10^-6[dx,dy]=gradient(C);%计算梯度G=sqrt(dx.*dx+dy.*dy);%梯度幅值figure,imshow(uint8(G)),title('梯度图像');pha=atan(dy./(dx+e))figure,imshow(pha,[])图 1图 2 梯度角图2、计算图像边缘检测,用滤波器方式实现各种算子。

(1)Roberts算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);[m,n]=size(B);nB=B;robertsnum=0;%经roberts算子计算得到的每一个像素的值robertsthreshold=0.6;%设定阈值for j=1:m-1;%进行边界提取for k=1:n-1robertsnum=abs(B(j,k)-B(j+1,k+1))+abs(B(j+1,k)-B(j,k+1)); if(robertsnum>robertsthreshold)nB(j,k)=255;elsenB(j,k)=0;endendendsubplot(1,2,1);imshow(B);title('原图');subplot(1,2,2);imshow(nB,[]);title('Robert算子处理后的图像');图 3(2)Sobel算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);[m,n]=size(B);f=double(B);u=double(B);usobel=B;for i=2:m-1%sobel边缘检测for j=2:n-1;gx=(u(i+1,j-1)+2*u(i+1,j)+f(i+1,j+1)-(u(i-1,j-1)+2*u(i-1,j)+f(i-1,j+1))); gy=(u(i-1,j+1)+2*u(i,j+1)+f(i+1,j+1)-(u(i-1,j-1)+2*u(i,j-1)+f(i+1,j-1))); usobel(i,j)=sqrt(gx^2+gy^2);endendsubplot(1,2,1);imshow(B);title('原图');subplot(1,2,2);imshow(im2uint8(usobel));title('Sobel边缘检测后的图像');图 4(3)Prewitt算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);[m,n]=size(B);nB=B;prewittnum=0;%经prewitt算子计算得到的每一个像素的值prewittthreshold=0.6;%设定阈值for j=2:m-1;%进行边界提取for k=2:n-1prewittnum=abs(B(j-1,k+1)-B(j+1,k+1))+B(j-1,k)-B(j+1,k)+B(j-1,k-1)-B(j+1,k-1)+abs(B(j-1,k+1)+B(j,k+1)+B(j+1,k+1)-B(j-1,k-1)-B(j,k-1)-B(j+1,k-1));if(prewittnum>prewittthreshold)nB(j,k)=255;elsenB(j,k)=0;endendendsubplot(1,2,1);imshow(B);title('原图');subplot(1,2,2);imshow(nB,[]);title('Prewitt算子处理后的图像');图 5(4)Laplace边缘检测function flapEdge=LaplaceEdge(pic,Moldtype,thresh)[m,n]=size(pic);flapEdge=zeros(m,n);%四邻域拉普拉斯边缘检测算子if 4==Moldtypefor i=2:m-1for j=2:n-1temp=-4*pic(i,j)+pic(i-1,j)+pic(i+1,j)+pic(i,j-1)+pic(i,j+1);if temp>threshflapEdge(i,j)=255;elseflapEdge(i,j)=0;endendendend%八邻域拉普拉斯边缘检测算子if 8==Moldtypefor i=2:m-1for j=2:n-1temp=-8*pic(i,j)+pic(i-1,j)+pic(i+1,j)+pic(i,j-1)+pic(i,j+1)+pic(i-1,j-1)+pic(i+1,j+1)+pic(i+1,j-1)+pic(i-1,j+1); if temp>threshflapEdge(i,j)=255;elseflapEdge(i,j)=0;endendendend主函数:clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);C=double(B);t=60;Lapmodtype=8;%设置模板方式flapEdge=LaplaceEdge(C,Lapmodtype,t);fgrayLapedge=uint8(flapEdge);figure()imshow(fgrayLapedge),title('laplace边缘检测图像');图 6(4)Kirsch算子clearclcclose allI=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);figure(1)imshow(B,[])title('原始图象')%对图象进行均值滤波bw2=filter2(fspecial('average',3),B);%对图象进行高斯滤波bw3=filter2(fspecial('gaussian'),bw2);%利用小波变换对图象进行降噪处理[thr,sorh,keepapp]=ddencmp('den','wv',bw3); %获得除噪的缺省参数bw4=wdencmp('gbl',bw3,'sym4',2,thr,sorh,keepapp);%图象进行降噪处理%---------------------------------------------------------------------%提取图象边缘t=3000; %设定阈值bw5=double(bw4);[m,n]=size(bw5);g=zeros(m,n);d=zeros(1,8);%利用Kirsch算子进行边缘提取for i=2:m-1for j=2:n-1d(1) =(5*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(2) =((-3)*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(3) =((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)+5*bw5(i+1,j+1))^2;d(4) =((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i,j+1)-3*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2;d(5) =((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i,j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2;d(6) =((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(7) =(5*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)+5*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(8) =(5*bw5(i-1,j-1)+5*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2; g(i,j) = max(d);endend%显示边缘提取后的图象for i=1:mfor j=1:nif g(i,j)>tbw5(i,j)=255;elsebw5(i,j)=0;endendendfigure(2)imshow(bw5,[])title('Kirsch ')图 7(5)LoG和canny算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);bw1=edge(B,'log',0.01);bw3=edge(B,'canny',0.1);figure;subplot(1,2,1);imshow(bw1,[]);title('loG边缘检测'); subplot(1,2,2);imshow(bw3,[]);title('canny边缘检测');图 83、大津法实现图像分割clear;I=imread('C:\Users\admin\Desktop\cat.jpg');B=rgb2gray(I);T = graythresh(B);%求阈值BW = im2bw(B,T);%二值化imshow(BW,[])图 9。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告光信13-2班2013210191韩照夏数字图像处理实验报告实验一数字图像空间域平滑一、实验目的掌握图像空间域平滑的原理和程序设计;观察对图像进行平滑增强的效果。

二、实验设备计算机,Matlab程序平台。

三、实验原理图像平滑处理的目的是改善图像质量和抽出对象特征。

任何一幅未经处理的原始图像,都存在着一定程度的噪声干扰。

噪声恶化了图像质量,使图像模糊,甚至淹没特征,给分析带来困难。

消除图像噪声的工作称为图像平滑或滤波。

针对不同噪声源(如光栅扫描、底片颗粒、机械元件、信道传输等)引起的不同种类噪声(如加性噪声、乘性噪声、量化噪声等),平滑方法也不同。

平滑可以在空间域进行,也可以在频率域进行。

1.局部平均法局部平滑法是一种直接在空间域上进行平滑处理的技术。

假设图像由许多灰度恒定的小块组成,相邻象素间存在很高的空间相关性,而噪声则是统计独立的。

因此,可用邻域内各象素的灰度平均值代替该象素原来的灰度值,实现图像的平滑。

对图像采用3×3的邻域平均法,其作用相当于用以下模板与图像进行卷积运算。

2. 超限象素平滑法 对邻域平均法稍加改进,可导出超限象素平滑法。

其原理是将f(x,y)和邻域平均g(x,y)差的绝对值与选定的阈值进行比较,根据比较结果决定点(x,y )的最后灰度g ´(x,y)。

其表达式为3. 二维中值滤波中值滤波就是用一个奇数点的移动窗口, 将窗口中心点的值用窗口内各点的中值代替。

二维中值滤波可由下式表示常用的窗口有:四、实验步骤1.实验准备:打开计算机,进入Matlab 程序界面。

2.输入图像空间域平滑处理程序,程序如下:⎩⎨⎧>-= ),(),(),( ),,(),('其他,当y x f T y x g y x f y x g y x g )},({),(y x f Med y x g A=程序1.1 图像平滑处理clear;clc;I=imread('lena.jpg');subplot(3,2,1);imshow(I);title('原图像');I1=imnoise(I,'salt & pepper',0.02);subplot(3,2,2);imshow(I1);title('对I加椒盐噪声的图像');h2=fspecial('average',[3 3]);I2=imfilter(I1,h2,'replicate');subplot(3,2,3);imshow(I2);title('3×3邻域平滑');h3=fspecial('average',[5 5]);I3=imfilter(I1,h3,'replicate');subplot(3,2,4);imshow(I3);title('5×5邻域平滑');I4=I1;I4((abs(I1-I2))>64)=I2((abs(I1-I2))>64);subplot(3,2,5);imshow(I4);title('3×3超限象素平滑(T=64)'); I5=I1;I5((abs(I1-I3))>48)=I3((abs(I1-I3))>48);subplot(3,2,6);imshow(I5);title('5×5超限象素平滑(T=48)');程序1.2 图像平均平滑与中值滤波clear;clc;I=imread('lena.jpg');subplot(3,3,1);imshow(I);title('原图像');I1=imnoise(I,'gaussian',0.02);subplot(3,3,2);imshow(I1);title('高斯噪声');I2=imnoise(I,'salt & pepper',0.02);subplot(3,3,3);imshow(I1);title('椒盐噪声');h1=fspecial('average',[3 3]);I3=imfilter(I1,h1,'replicate');subplot(3,3,4);imshow(I3);title('对I1 3×3邻域平滑');h2=fspecial('average',[3 3]);I4=imfilter(I2,h2,'replicate');subplot(3,3,5);imshow(I4);title('对I2 3×3邻域平滑');I5=medfilt2(I1,[5 5]);subplot(3,3,6);imshow(I5);title('对I1 5×5中值滤波');I6=medfilt2(I2,[5 5]);subplot(3,3,7);imshow(I6);title('对I2 5×5中值滤波');3.运行图像处理程序,并保存处理结果图像。

数字图像处理实验报告(三四五)

数字图像处理实验报告(三四五)

实验三图像的几何变换一.实验目的及要求掌握图像几何变换的基本原理,熟练掌握数字图像的缩放、旋转、平移、镜像和转置的基本原理及其MATLAB编程实现方法。

二、实验内容(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。

熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。

1. 图像缩放clear all, close allI = imread('cameraman.tif');Scale = 1.35; % 将图像放大1.35倍J1 = imresize(I, Scale, 'nearest'); %using the nearest neighbor interpolationJ2 = imresize(I, Scale, 'bilinear'); %using the bilinear interpolationimshow(I), title('Original Image');figure, imshow(J1), title('Resized Image-- using the nearest neighbor interpolation ');figure, imshow(J2), title('Resized Image-- using the bilinear interpolation ');% 查看imresize使用帮助help imresizeCommand窗口显示如下:IMRESIZE Resize image.B = IMRESIZE(A, SCALE) returns an image that is SCALE times thesize of A, which is a grayscale, RGB, or binary image.B = IMRESIZE(A, [NUMROWS NUMCOLS]) resizes the image so that it hasthe specified number of rows and columns. Either NUMROWS or NUMCOLS may be NaN, in which case IMRESIZE computes the number of rows orcolumns automatically in order to preserve the image aspect ratio.[Y, NEWMAP] = IMRESIZE(X, MAP, SCALE) resizes an indexed image.[Y, NEWMAP] = IMRESIZE(X, MAP, [NUMROWS NUMCOLS]) resizes an indexed image.T o control the interpolation method used by IMRESIZE, add a METHODargument to any of the syntaxes above, like this:IMRESIZE(A, SCALE, METHOD)IMRESIZE(A, [NUMROWS NUMCOLS], METHOD),IMRESIZE(X, MAP, M, METHOD)IMRESIZE(X, MAP, [NUMROWS NUMCOLS], METHOD) METHOD can be a string naming a general interpolation method: 'nearest' - nearest-neighbor interpolation'bilinear' - bilinear interpolation'bicubic' - cubic interpolation; the default method METHOD can also be a string naming an interpolation kernel: 'box' - interpolation with a box-shaped kernel'triangle' - interpolation with a triangular kernel(equivalent to 'bilinear')'cubic' - interpolation with a cubic kernel(equivalent to 'bicubic')'lanczos2' - interpolation with a Lanczos-2 kernel'lanczos3' - interpolation with a Lanczos-3 kernelFinally, METHOD can be a two-element cell array of the form {f,w}, where f is the function handle for a custom interpolation kernel, andw is the custom kernel's width. f(x) must be zero outside the interval -w/2 <= x < w/2. Your function handle f may be called with a scalar or a vector input.You can achieve additional control over IMRESIZE by using parameter/value pairs following any of the syntaxes above. For example:B = IMRESIZE(A, SCALE, PARAM1, VALUE1, PARAM2, VALUE2, ...)Parameters include:'Antialiasing' - true or false; specifies whether to performantialiasing when shrinking an image. Thedefault value depends on the interpolationmethod you choose. For the 'nearest' method,the default is false; for all other methods,the default is true.'Colormap' - (only relevant for indexed images) 'original'or 'optimized'; if 'original', then theoutput newmap is the same as the input map.If it is 'optimized', then a new optimizedcolormap is created. The default value is'optimized'.'Dither' - (only for indexed images) true or false;specifies whether to perform colordithering. The default value is true.'Method' - As described above'OutputSize' - A two-element vector, [MROWS NCOLS],specifying the output size. One element maybe NaN, in which case the other value iscomputed automatically to preserve the aspectratio of the image.'Scale' - A scalar or two-element vector specifying theresize scale factors. If it is a scalar, thesame scale factor is applied to eachdimension. If it is a vector, it containsthe scale factors for the row and columndimensions, respectively.Examples--------Shrink by factor of two using the defaults of bicubic interpolation and antialiasing.I = imread('rice.png');J = imresize(I, 0.5);figure, imshow(I), figure, imshow(J)Shrink by factor of two using nearest-neighbor interpolation. (This is the fastest method, but it has the lowest quality.)J2 = imresize(I, 0.5, 'nearest');Resize an indexed image.[X, map] = imread('trees.tif');[Y, newmap] = imresize(X, map, 0.5);imshow(Y, newmap)Resize an RGB image to have 64 rows. The number of columns is computed automatically.RGB = imread('peppers.png');RGB2 = imresize(RGB, [64 NaN]);Note----The function IMRESIZE in previous versions of the Image ProcessingT oolbox used a somewhat different algorithm by default. If you need the same results produced by the previous implementation, call the function IMRESIZE_OLD.Class Support-------------The input image A can be numeric or logical and it must be nonsparse. The output image is of the same class as the input image. The inputindexed image X can be uint8, uint16, or double.See also imresize_old, imrotate, imtransform, tformarray.Reference page in Help browserdoc imresize执行程序所得结果如下:改变参数Scale =0.5得到图形结果如下:对以上实验结果,分析如下:通过查看命令窗口查看imresize函数的使用方法。

数字图像处理实验三(邻域平均法和中值滤波)

数字图像处理实验三(邻域平均法和中值滤波)

数字图像处理 实验三
邻域平均法(box 模板)和中值滤波处理
加入脉冲噪声后的图像:testnoise.bmp 去噪过程 结果图像
请设计程序,分别用邻域平均法,其模板为:
和中值滤波法对testnoise 图像进行去噪处理(中值滤波的模板的大小也设为3×3)。

得出实验结果图像后,比较这两种方法去噪的效果好坏,并分析具体原因。

完成上述工作后,使用程序进行验证分析:使用邻域平均法时,3×3和5×5模板大小对图像进行处理的效果有何差别?并分析原因。

附加说明:程序框架可以参考第二次实验指导书上给出的示例程序。

邻域平均法 中值滤波法
⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡1111*1111191。

数字图像处理实验三:图像的复原

数字图像处理实验三:图像的复原

南京工程学院通信工程学院实验报告课程名称数字图像处理C实验项目名称实验三图像的复原实验班级算通111 学生姓名夏婷学号 208110408 实验时间 2014年5月5日实验地点信息楼C322实验成绩评定指导教师签名年月日实验三、图像的恢复一、实验类型:验证性实验二、实验目的1. 掌握退化模型的建立方法。

2. 掌握图像恢复的基本原理。

三、实验设备:安装有MATLAB 软件的计算机四、实验原理一幅退化的图像可以近似地用方程g=Hf+n 表示,其中g 为图像,H为变形算子,又称为点扩散函数(PSF ),f 为原始的真实图像,n 为附加噪声,它在图像捕获过程中产生并且使图像质量变坏。

其中,PSF 是一个很重要的因素,它的值直接影响到恢复后图像的质量。

I=imread(‘peppers.png’);I=I(60+[1:256],222+[1:256],:);figure;imshow(I);LEN=31;THETA=11;PSF=fspecial(‘motion’,LEN,THETA);Blurred=imfilter(I,PSF,’circular’,’conv’);figure;imshow(Blurred);MATLAB 工具箱中有4 个图像恢复函数,如表3-1 所示。

这4 个函数都以一个PSF 和模糊图像作为主要变量。

deconvwnr 函数使用维纳滤波对图像恢复,求取最小二乘解,deconvreg 函数实现约束去卷积,求取有约束的最小二乘解,可以设置对输出图像的约束。

deconvlucy 函数实现了一个加速衰减的Lucy-Richardson 算法。

该函数采用优化技术和泊松统计量进行多次迭代。

使用该函数,不需要提供有关模糊图像中附加噪声的信息。

deconvblind 函数使用的是盲去卷积算法,它在不知道PSF 的情况下进行恢复。

调用deconvblind 函数时,将PSF 的初值作为一个变量进行传递。

数字图像处理 实验报告(完整版)

数字图像处理 实验报告(完整版)

数字图像处理实验一 MATLAB数字图像处理初步一、显示图像1.利用imread( )函数读取一幅图像,假设其名为lily.tif,存入一个数组中;2.利用whos 命令提取该读入图像flower.tif的基本信息;3.利用imshow()函数来显示这幅图像;实验结果如下图:源代码:>>I=imread('lily.tif')>> whos I>> imshow(I)二、压缩图像4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为lily.jpg;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。

6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flily.bmp。

7.用imread()读入图像Sunset.jpg和Winter.jpg;8.用imfinfo()获取图像Sunset.jpg和Winter.jpg的大小;9.用figure,imshow()分别将Sunset.jpg和Winter.jpg显示出来,观察两幅图像的质量。

其中9的实验结果如下图:源代码:4~6(接上面两个) >>I=imread('lily.tif')>> imfinfo 'lily.tif';>> imwrite(I,'lily.jpg','quality',20);>> imwrite(I,'lily.bmp');7~9 >>I=imread('Sunset.jpg');>>J=imread('Winter.jpg')>>imfinfo 'Sunset.jpg'>> imfinfo 'Winter.jpg'>>figure(1),imshow('Sunset.jpg')>>figure(2),imshow('Winter.jpg')三、二值化图像10.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。

数字图像处理上机实验三

数字图像处理上机实验三

医学图像处理实验三1、计算图像的梯度,梯度值和梯度角。

I=imread('C:\Users\Administrator\Desktop\cat.jpg'); B=rgb2gray(I);C=double(B);e=1e-6;%10^-6[dx,dy]=gradient(C);%计算梯度G=sqrt(dx.*dx+dy.*dy);%梯度幅值figure,imshow(uint8(G)),title('梯度图像');pha=atan(dy./(dx+e))figure,imshow(pha,[])图 1图 2 梯度角图2、计算图像边缘检测,用滤波器方式实现各种算子。

(1)Roberts算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);[m,n]=size(B);nB=B;robertsnum=0;%经roberts算子计算得到的每一个像素的值robertsthreshold=0.6;%设定阈值for j=1:m-1;%进行边界提取for k=1:n-1robertsnum=abs(B(j,k)-B(j+1,k+1))+abs(B(j+1,k)-B(j,k+1)); if(robertsnum>robertsthreshold)nB(j,k)=255;elsenB(j,k)=0;endendendsubplot(1,2,1);imshow(B);title('原图');subplot(1,2,2);imshow(nB,[]);title('Robert算子处理后的图像');图 3(2)Sobel算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);[m,n]=size(B);f=double(B);u=double(B);usobel=B;for i=2:m-1%sobel边缘检测for j=2:n-1;gx=(u(i+1,j-1)+2*u(i+1,j)+f(i+1,j+1)-(u(i-1,j-1)+2*u(i-1,j)+f(i-1,j+1)));gy=(u(i-1,j+1)+2*u(i,j+1)+f(i+1,j+1)-(u(i-1,j-1)+2*u(i,j-1)+f(i+1,j-1)));usobel(i,j)=sqrt(gx^2+gy^2);endendsubplot(1,2,1);imshow(B);title('原图');subplot(1,2,2);imshow(im2uint8(usobel));title('Sobel边缘检测后的图像');图 4(3)Prewitt算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);[m,n]=size(B);nB=B;prewittnum=0;%经prewitt算子计算得到的每一个像素的值prewittthreshold=0.6;%设定阈值for j=2:m-1;%进行边界提取for k=2:n-1prewittnum=abs(B(j-1,k+1)-B(j+1,k+1))+B(j-1,k)-B(j+1,k)+B(j-1,k-1)-B(j+1,k-1)+abs(B(j-1,k +1)+B(j,k+1)+B(j+1,k+1)-B(j-1,k-1)-B(j,k-1)-B(j+1,k-1));if(prewittnum>prewittthreshold)nB(j,k)=255;elsenB(j,k)=0;endendendsubplot(1,2,1);imshow(B);title('原图');subplot(1,2,2);imshow(nB,[]);title('Prewitt算子处理后的图像');图 5(4)Laplace边缘检测function flapEdge=LaplaceEdge(pic,Moldtype,thresh)[m,n]=size(pic);flapEdge=zeros(m,n);%四邻域拉普拉斯边缘检测算子if 4==Moldtypefor i=2:m-1for j=2:n-1temp=-4*pic(i,j)+pic(i-1,j)+pic(i+1,j)+pic(i,j-1)+pic(i,j+1);if temp>threshflapEdge(i,j)=255;elseflapEdge(i,j)=0;endendendend%八邻域拉普拉斯边缘检测算子if 8==Moldtypefor i=2:m-1for j=2:n-1temp=-8*pic(i,j)+pic(i-1,j)+pic(i+1,j)+pic(i,j-1)+pic(i,j+1)+pic(i-1, j-1)+pic(i+1,j+1)+pic(i+1,j-1)+pic(i-1,j+1);if temp>threshflapEdge(i,j)=255;elseflapEdge(i,j)=0;endendendend主函数:clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);C=double(B);t=60;Lapmodtype=8;%设置模板方式flapEdge=LaplaceEdge(C,Lapmodtype,t);fgrayLapedge=uint8(flapEdge);figure()imshow(fgrayLapedge),title('laplace边缘检测图像');图 6(4)Kirsch算子clearclcclose allI=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);figure(1)imshow(B,[])title('原始图象')%对图象进行均值滤波bw2=filter2(fspecial('average',3),B);%对图象进行高斯滤波bw3=filter2(fspecial('gaussian'),bw2);%利用小波变换对图象进行降噪处理[thr,sorh,keepapp]=ddencmp('den','wv',bw3); %获得除噪的缺省参数bw4=wdencmp('gbl',bw3,'sym4',2,thr,sorh,keepapp);%图象进行降噪处理%---------------------------------------------------------------------%提取图象边缘t=3000; %设定阈值bw5=double(bw4);[m,n]=size(bw5);g=zeros(m,n);d=zeros(1,8);%利用Kirsch算子进行边缘提取for i=2:m-1for j=2:n-1d(1)=(5*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i,j+1 )-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(2)=((-3)*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i, j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(3)=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i, j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)+5*bw5(i+1,j+1))^2;d(4)=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i, j+1)-3*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2;d(5)=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i, j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2;d(6)=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i, j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(7)=(5*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1 )+5*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(8)=(5*bw5(i-1,j-1)+5*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1 )-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;g(i,j) = max(d);endend%显示边缘提取后的图象for i=1:mfor j=1:nif g(i,j)>tbw5(i,j)=255;elsebw5(i,j)=0;endendendfigure(2)imshow(bw5,[])title('Kirsch ')图7(5)LoG和canny算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);bw1=edge(B,'log',0.01);bw3=edge(B,'canny',0.1);figure;subplot(1,2,1);imshow(bw1,[]);title('loG边缘检测'); subplot(1,2,2);imshow(bw3,[]);title('canny边缘检测');图83、大津法实现图像分割clear;I=imread('C:\Users\admin\Desktop\cat.jpg');B=rgb2gray(I);T = graythresh(B);%求阈值BW = im2bw(B,T);%二值化imshow(BW,[])图9(注:文档可能无法思考全面,请浏览后下载,供参考。

数字图像处理上机实验报告 (三)

数字图像处理上机实验报告 (三)

图像处理上机实验报告第三次指导老师:许永忠组员姓名:龙斌王国健学号: 05102344(龙)05102350(王)班级:地物10-2班时间: 2013年6月中国矿业大学资源学院上机实验报告课程名称:数字图像处理班级地物10-2班组员姓名龙斌王国健组员学号0510234405102350指导教师许永忠日期2013.05.26第15 周星期日第7,8节上机时数2学时实验名称数字图像处理PS的简单应用实验目的1.学会进行一些简单的字体特效制作以及简单的图像合成。

2.学会辨别细微的真假变化。

实验内容1.继续熟悉ps的基本运用,理解ps技术在生活中的重要性;2.用ps技术合成一张自己的图片;3.比较两个三角形出现差异的原因。

实验步骤1. 照片合成a.选择一张风景图(图1)和自己一张生活照(图2),用钢笔工具沿着图2中的人物作路径,完成后ctrl+enter转化为选区,然后ctrl+j复制选区;图1 图2b.拖动选区至图1,ctrl+t调整选区大小,使选区下的人物在图1中的一个合适位置和比例;c.作水中倒影。

ctrl+j复制刚刚调整好的选区,再ctrl+t,选择垂直翻转,然后调整至适当的位置,使人物倒影于水中;d.选择“滤镜”—“扭曲”—“波纹”,使人物图像有轻微的水波荡漾状扭曲,然后调整其透明度,使倒影更逼真;e.做彩虹。

Ctrl+n新建一个空白图层,背景为透明。

选择渐变工具,对渐变色进行调整,从左到右依次为“赤橙黄绿青蓝紫”渐变;f.在图层中作小小拖动,然后选择滤镜—扭曲—极坐标即完成。

g.把“彩虹”拖至图层1,同理ctrl+t调整大小和位置,并与图层1进行滤色叠加,使彩虹颜色变淡,然后与人物倒影一样对彩虹做倒影即可;h.ctrl+s保存,最后效果如图3合图4。

j.同理照一张有老鹰,一张含老虎和一张自己图片,分别做选区抠出其中的老虎,老鹰和自己,然后都拖到草原中,再用橡皮工具进行适当擦除,使其充分与背景融合,再ctrl+l调整一下色相饱和度即可,成果见图5.1.龙斌合成成果图图32.王国健合成成果图2.三角形的比较有三种方法可比较出现这种情况的原因:第一种:图形直观比较:把上面的三角形按其边缘复制,并与下面三角形(有空白的)重合,我们会很容易的发现:虽然两个三角形的底边和高相等,但他们的斜边并不相等,即有空白正方形的三角形斜边并不是直线,而是一条微向上凸起的曲线(但由于很小,肉眼较难分辨),而它凸起的那小部分面积恰好就是空白正方形的面积。

图像处理实验3-4

图像处理实验3-4

数字图像处理实验1. 直方图修正灰度变换是图像增强的一种重要手段,使图像对比度扩展,图像更加清晰,特征更加明显。

灰度级的直方图给出了一幅图像概貌的描述,通过修改灰度直方图来得到图像增强。

(1)计算出一幅灰度图像的直方图clearclose allI=imread(' rice.png');imhist(I)title('实验一(1)直方图');(2)对灰度图像进行简单的灰度线形变换,figuresubplot(2,2,1)imshow(I);title('试验2-灰度线性变换');subplot(2,2,2)histeq(I);(3)看其直方图的对应变化和图像对比度的变化原图像f(m,n) 的灰度范围[a,b] 线形变换为图像g(m,n),灰度范围[a’,b’] 公式:g(m,n)=a’+(b’-a’)* f(m,n) /(b-a)figuresubplot(2,2,1)imshow(I)J=imadjust(I,[0.3,0.7],[0,1],1);title(' 实验一(3)用g(m,n)=a’+(b’-a’)* f(m,n)/(b-a)进行变换');subplot(2,2,2)imshow(J)subplot(2,2,3)imshow(I)J=imadjust(I,[0.5 0.8],[0,1],1);subplot(2,2,4)imshow(J)(4) 图像二值化(选取一个域值,将图像变为黑白图像)figuresubplot(2,2,1)imshow(I)J=find(I<150);I(J)=0;J=find(I>=150);I(J)=255;title(' 实验一(4)图像二值化( 域值为150 )');subplot(2,2,2)imshow(I)clc;I=imread(‘rice.png');bw=im2bw(I,0.5);%选取阈值为0.5figure;imshow(bw) %显示二值图像2. 图像处理变换1.傅立叶变换熟悉其概念和原理,实现对一幅灰度图像的快速傅立叶变换,并求其变换后的系数分布. 2.离散余弦变换熟悉其概念和原理,实现对一幅灰度和彩色图像作的离散余弦变换,选择适当的DCT系数阈值对其进行DCT反变换.% 图像的FFT变换clc;I=imread('rice.png');subplot(1,2,1)imshow(I);title('原图');subplot(1,2,2)imhist(I);title('直方图');colorbar;J=fft2(I);figure;subplot(1,2,1)imshow(J);title('FFT变换结果');subplot(1,2,2)K=fftshift(J);imshow(K);title('零点平移');figure;imshow(log(abs(K)),[]),colormap(jet(64)),colorbar;title('系数分布图');% 图像的DCT变换RGB=imread('onion.png');figure;subplot(1,2,1)imshow(RGB);title('彩色原图');a=rgb2gray(RGB);subplot(1,2,2)imshow(a);title('灰度图');figure;b=dct2(a);imshow(log(abs(b)),[]),colormap(jet(64)),colorbar; title('DCT变换结果');figure;b(abs(b)<10)=0;% idctc=idct2(b)/255;imshow(c);title('IDCT变换结果');3. 小波变换实验内容:熟悉小波变换的概念和原理,熟悉matlab小波工具箱主要函数的使用.利用二维小波分析对一幅图像作2层小波分解,并在此基础上提取各层的低频信息实现图像的压缩.程序如下:clcclose allcleara=imread('deblur1.png ');subplot(1,2,1);imshow(a);title('原始图像');I=rgb2gray(a);subplot(1,2,2);imshow(I);title('原始图像的灰度图');% 进行二维小波变换[a,b] = wavedec2(I, 2, 'bior3.7');% 提取各层低频信息figure;c = appcoef2( a, b, 'bior3.7', 1 );subplot(1,2,1);imshow(c, []);title('一层小波变换结果');d = appcoef2( a, b, 'bior3.7', 2 );subplot(1,2,2);imshow(d, []);title('二层小波变换结果');4. 模板运算一、实验内容:(1)平滑:平滑的目的是模糊和消除噪声。

数字图像处理实验报告实验三

数字图像处理实验报告实验三
2.设计一个检测图3-2中边缘的程序,要求结果类似图3-3,并附原理说明
代码:
I=imread('lines.png');
F=rgb2gray(I);
subplot(2,2,1);
imshow(I);
title('原始图像');
thread=130/255;
subplot(2,2,2);
imhist(F);
图5-2 添上一层(漆)
3.开运算open:
4.闭close:
5.HMT(Hit-Miss Transform:击中——击不中变换)
条件严格的模板匹配
模板由两部分组成。 :物体, :背景。
图5-3 击不中变换示意图
性质:
(1) 时,
(2)
6.细化/粗化
(1)细化(Thin)
去掉满足匹配条件的点。
图5-4 细化示意图
se = strel('ball',5,5);
I2 = imerode(I,se);
imshow(I), title('Original')
figure, imshow(I2), title('Eroded')
Matlab用imopen函数实现图像开运算。用法为:
imopen(I,se);
I为图像源,se为结构元素
构造一个中心具有菱形结构的结构元素,R为跟中心点的距离
SE = strel('rectangle',MN)
构造一个矩形的结构元素,MN可写在[3 4],表示3行4列
SE = strel('square',W)
构造一个正方形的矩阵。

数字图像处理实验报告 实验三

数字图像处理实验报告 实验三

数字图像处理实验报告实验三一、实验目的1、掌握二维DFT 变换及其物理意义2、掌握二维DFT 变换的MATLAB 程序3、空间滤波及频域滤波二、实验内容1、利用MATLAB 实现数字图像的傅里叶变换(1)实验内容读入并显示图Fig0316(3)(third_from_top).tif,作该图的二维FFT 变换F,将其直流分量移到频谱中心F1,计算其实部RR、虚部II,用两种方法计算及幅值A1=abs(F1)和A2=sqrt(RR.^2+II.^2),分别显示A1 和A2,并加以比较。

(2)程序代码clear all;f=imread('Fig0316(3)(third_from_top).tif');imshow(f);title('图1.1 原图');F=fft2(f);F1=fftshift(F);RR=real(F1);II=imag(F1);A1=abs(F1);figure;imshow(log(1+A1),[]);title('图1.2 频谱幅值A1');A2=sqrt(RR.^2+II.^2);figure;imshow(log(1+A2),[]);title('图1.3 频谱幅值A2');(3)程序运行结果图1.1 原图图1.2 频谱幅值A1图1.3 频谱幅值A22、近似冲击函数二维傅里叶变换(1)实验内容A=zeros(99,99);A(49:51,49:51)=1;作A 的二维傅里叶变换B,将B 直流分量移到频谱中心B1,分别用函数imshow 和mesh 显示A 和B1 模的对数(log(1+abs(B1)))(2)程序代码clear all;A=zeros(99,99);A(49:51,49:51)=1;B=fft2(A);B1=fftshift(B);imshow(A);title('图2.1 空域图形(imshow)');figure;imshow(log(1+abs(B1)));title('图2.2 频域图形(imshow)');figure;mesh(A);title('图2.3 空域图形(mesh)');figure;mesh(log(1+abs(B1)));title('图2.4 频域图形(mesh)');(3)程序运行结果图2.1 空域图形(imshow)图2.2 频域图形(imshow)图2.3 空域图形(mesh)图2.4 频域图形(mesh)3、空间滤波与频域滤波(1)实验内容将图Fig0504(a)(gaussian-noise).tif(f)分别进行空间与频域滤波。

数字图像处理实验报告

数字图像处理实验报告

[键入公司名称]数字图像处理实验报告班级:姓名:学号:目录实验一:matlab数字图像处理初步 (3)一.实验目的 (3)二.实验内容 (3)三.实验步骤 (3)实验二:图像的傅立叶变换 (7)一.实验目的 (7)二.实验原理 (7)三.实验内容 (8)四.实验步骤 (8)实验三:数字图像的频域滤波 (9)一.实验目的 (9)二.实验原理 (9)三.实验内容 (10)四.实验步骤 (11)实验四:图象旋转 (14)一.实验目的 (14)二.实验原理 (14)三.实验内容 (14)四.实验步骤 (14)实验五: 图象压缩 (16)一. 实验目的 (16)二.实验内容 (16)二.实验步骤 (16)实验一:matlab数字图像处理初步一.实验目的1、学习在matlab环境下对图像文件的I/O操作,为读取各种格式的图像文件和后续进行图像处理打下基础2、熟悉matlab操作环境3、熟悉matlab的一些指令语句二.实验内容利用matlab为用户提供的专门函数从图像格式的文件中读/写图像数据、显示图像,以及查询图像文件的信息三.实验步骤1、利用imshow显示MATLAB自带的图像在控制台输入>> I=imread('H:\a.bmp');>> imshow(I)弹出窗口显示图像2、用(imfinfo)功能得到图像的相关信息;>> info=imfinfo('autumn.tif');>> info结果为Filename: Filename: 'D:\MATLAB7\toolbox\images\imdemos\autumn.tif' FileModDate: '04-Dec-2000 21:57:54'FileSize: 213642Format: 'tif'FormatVersion: []Width: 345Height: 206BitDepth: 24ColorType: 'truecolor'FormatSignature: [73 73 42 0]ByteOrder: 'little-endian'NewSubfileType: 0BitsPerSample: [8 8 8]Compression: 'Uncompressed'PhotometricInterpretation: 'RGB'StripOffsets: [30x1 double]SamplesPerPixel: 3RowsPerStrip: 7StripByteCounts: [30x1 double]XResolution: 72YResolution: 72ResolutionUnit: 'Inch'Colormap: []PlanarConfiguration: 'Chunky'TileWidth: []TileLength: []TileOffsets: []TileByteCounts: []Orientation: 1FillOrder: 1GrayResponseUnit: 0.0100MaxSampleValue: [255 255 255]MinSampleValue: 0Thresholding: 13、利用显示颜色条功能(colorbar)在图像的左边画一条颜色亮度显示条>> colorbar(I)显示结果为4、读取一幅RGB彩色图像,将其转换为灰度图像,并在同一窗口显示原图>>RGB=imread('autumn.tif'); [m,n,p]=size(RGB) ; %矩阵大小>>I=rgb2gray(RGB) ; % 真彩色图像转换为灰度图像>>I1=im2bw(I) ; % 灰色图像二值画>>I2=~I1; %对二值图像取反>>subplot(1,2,1),imshow(RGB); >>subplot(1,2,2),imshow(I); >>figure % 新建个图形窗口>>subplot(1,3,1),imshow(I); >>subplot(1,3,2),imshow(I1); >>subplot(1,3,3),imshow(I2); 结果为:实验二:图像的傅立叶变换一.实验目的1、理解离散傅立叶变换的基本原理2、掌握应用MATLAB语言进行FFT及逆变换的方法二.实验原理Matlab 函数 fft、fft2 和 fftn 分别可以实现一维、二维和 N 维 DFT 算法;而函数 ifft、ifft2 和 ifftn 则用来计算反 DFT 。

数字图像处理上机实验报告

数字图像处理上机实验报告

数字图像处理上机实验报告数字图像处理上机实验报告实验⼀:MATLAB⼯具箱的使⽤实验⽬的:11:了解matlab语⾔,熟悉并掌握matlab相关的处理语句。

2:了解matlab在图像处理中的优缺点。

3 熟悉matlab的使⽤技巧,能⽤matlab熟悉的对数字图像进⾏各种处理。

1 将⼀幅灰度图像转换成索引⾊图像。

I=imread('ngc4024m.tif');X=grayslice(I,16);imshow(I)figure,imshow(X,hot(16))2:对⼀副图像进⾏⼆值化处理。

load treesBW=im2bw(X,map,0.4);imshow(X,map)figure,imshow(BW)3:将索引⾊图像转化成灰度图像。

load trees I=ind2gray(X,map);imshow(X,map)figure,imshow(I)4:显⽰⼀幅图像。

load clown image(10,10,X) colormap(map)试验⼆图像变换实验⽬的:1 熟悉掌握DFT和DCT变换的matlab实现。

2 利⽤matlab试验DFT和DCT的变换,求出图像的频谱。

1.⼆维离散傅⾥叶变换的旋转型。

I=zeros(256,256);>> I(28:228,108:148)=1;>> imshow(I)J=fft2(I);>> F=abs(J);>> J1=fftshift(F);figure>> imshow(J1,[5 50])>> I(28:228,108:148)=1;>> J=imrotate(I,315,'bilinear','crop'); >>figure >> imshow(J)J1=fft2(J);>> F=abs(J1);>> J2=fftshift(F);figure>> imshow(J2,[5 50])2.图像的傅⾥叶频谱。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告重庆邮电⼤学《数字图像处理》课程上机实验学院⽣物信息学院专业⽣物医学⼯程班级 0611302姓名李霞学号 2013211957实验⼀MATLAB数字图像处理初步⼀、实验⽬的与要求1.熟悉及掌握在MATLAB中能够处理哪些格式图像。

2.熟练掌握在MATLAB中如何读取图像。

3.掌握如何利⽤MATLAB来获取图像的⼤⼩、颜⾊、⾼度、宽度等等相关信息。

4.掌握如何在MATLAB中按照指定要求存储⼀幅图像的⽅法。

5.图像间如何转化。

⼆、实验原理及知识点1、数字图像的表⽰和类别⼀幅图像可以被定义为⼀个⼆维函数f(x,y),其中x和y是空间(平⾯)坐标,f 在任何坐标处(x,y)处的振幅称为图像在该点的亮度。

灰度是⽤来表⽰⿊⽩图像亮度的⼀个术语,⽽彩⾊图像是由单个⼆维图像组合形成的。

例如,在RGB彩⾊系统中,⼀幅彩⾊图像是由三幅独⽴的分量图像(红、绿、蓝)组成的。

因此,许多为⿊⽩图像处理开发的技术适⽤于彩⾊图像处理,⽅法是分别处理三副独⽴的分量图像即可。

图像关于x和y坐标以及振幅连续。

要将这样的⼀幅图像转化为数字形式,就要求数字化坐标和振幅。

将坐标值数字化成为取样;将振幅数字化成为量化。

采样和量化的过程如图1所⽰。

因此,当f的x、y分量和振幅都是有限且离散的量时,称该图像为数字图像。

作为MATLAB基本数据类型的数值数组本⾝⼗分适于表达图像,矩阵的元素和图像的像素之间有着⼗分⾃然的对应关系。

根据图像数据矩阵解释⽅法的不同,MA TLAB把其处理为4类:亮度图像(Intensity images)⼆值图像(Binary images)索引图像(Indexed images)RGB图像(RGB images)(1) 亮度图像⼀幅亮度图像是⼀个数据矩阵,其归⼀化的取值表⽰亮度。

若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是[0,255]和[0,65536]。

若图像是double类,则像素取值就是浮点数。

数字图像处理实验三中值滤波和均值滤波实验报告

数字图像处理实验三中值滤波和均值滤波实验报告

数字图像处理实验三均值滤波、中值滤波的计算机实现崔雪莹计科1202班一、实验目的:1)熟悉均值滤波、中值滤波处理的理论基础;2)掌握均值滤波、中值滤波的计算机实现方法;3)学习VC++ 6。

0 的编程方法;4)验证均值滤波、中值滤波处理理论;5)观察均值滤波、中值滤波处理的结果。

二、实验的软、硬件平台:硬件:微型图像处理系统,包括:主机, PC机;摄像机;软件:操作系统:WINDOWS2000或WINDOWSXP应用软件:VC++ 三、实验内容:1)握高级语言编程技术;2)编制均值滤波、中值滤波处理程序的方法;3)编译并生成可执行文件;4)考察处理结果。

四、实验要求:1)学习VC++确6。

0 编程的步骤及流程;2)编写均值滤波、中值滤波的程序;3)编译并改错;4)把该程序嵌入试验二给出的界面中(作适当修改);5)提交程序及文档;6)写出本次实验的体会。

五、实验结果截图实验均值滤波采用的是3X3的方块,取周围的像素点取得其均值代替原像素点。

边缘像素的处理方法是复制边缘的像素点,增加一个边框,计算里面的像素值得均值滤波。

六、实验体会本次实验在前一次的实验基础上增加均值滤波和中值滤波,对于椒盐噪声的处理,发现中值滤波的效果更为好一点,而均值滤波是的整个图像变得模糊了一点,效果差异较大。

本次实验更加增加了对数字图像处理的了解与学习。

七、实验程序代码注释及分析.”菜单项添加到系统菜单中。

gbBlue;lpBits2[p2+1]=pPalette[Palette].rgbGreen;lpBits2[p2+2]=pPalette[Palette].rgbRed;}}delete lpTemp;}lpBits=lpBitmap+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);if (lpBackup) delete lpBackup;lpBackup=new BYTE[nLen];memcpy(lpBackup,lpBitmap,nLen);}void CHistDemoADlg::OnOpen() mp|所有文件|*.*||",this);//新建文件选择对话框if ()==IDOK){FileName=(); //得到文件的路径if (!(FileName,CFile::modeRead)) return; //以只读方式打开文件// TODO: add loading code hereif (lpBitmap) delete lpBitmap; //保证lpBitmap为空nLen=(int)(); //得到文件的长度lpBitmap=new BYTE[nLen]; //为lpBitmap分配空间(lpBitmap,nLen); //将文件的内容读入到lpBitmap所指向的内存区域LoadBitmap(); //调用LoadBitmap(),加载位图图像if (lpBitmap) (nWidth,nHeight,lpBits);}}void CHistDemoADlg::OnHist(){// TODO: 在此添加控件通知处理程序代码HistogramEq();}void GetPoints(int nWidth,int nHeight,BYTE *lpBits,BYTE *lpPoints){int x,y,p;int nByteWidth=nWidth*3;if (nByteWidth%4) nByteWidth+=4-(nByteWidth%4);for(y=0;y<nHeight;y++) //每一行{for(x=0;x<nWidth;x++) //每一列{p=x*3+y*nByteWidth;lpPoints[x+y*nWidth]=(BYTE)*(float)lpBits[p+2]+*(float)lpBits[p+1]+*(float)lpBits[p]+; //三种颜色的比例计算对应点的颜色值,并且强制转换成BYTE}}}void PutPoints(int nWidth,int nHeight,BYTE *lpBits,BYTE *lpPoints) //逐个对lpBits进行赋值{int nByteWidth=nWidth*3;if (nByteWidth%4) nByteWidth+=4-(nByteWidth%4);int x,y,p,p1;for(y=0;y<nHeight;y++) //每一行{for(x=0;x<nWidth;x++) //每一列{p=x*3+y*nByteWidth;p1=x+y*nWidth;lpBits[p]=lpPoints[p1];lpBits[p+1]=lpPoints[p1];lpBits[p+2]=lpPoints[p1];}}}void CHistDemoADlg::HistogramEq(void){if (lpBitmap==0) return;BYTE *lpOutput=new BYTE[nByteWidth*nHeight];HistogramEq1(nWidth,nHeight,lpBits,lpOutput);(nWidth,nHeight,lpOutput); //在直方图均衡化的区域显示结果delete lpOutput;NoColor(); //将原始图像转换成灰度图像}void CHistDemoADlg:: NoColor(){if (lpBitmap==0) return;int x,y,p;BYTE Point;for(y=0;y<nHeight;y++) //每一行{for(x=0;x<nWidth;x++) //每一列{p=x*3+y*nByteWidth;Point=(BYTE)*(float)lpBits[p+2]+*(float)lpBits[p+1]+*(float)lpBits[p]+;//计算颜色值,在0-255的灰度级之间lpBits[p+2]=Point;lpBits[p+1]=Point;lpBits[p]=Point;}}(nWidth,nHeight,lpBits);//将彩色图像转化成灰度图像}void CHistDemoADlg::HistogramEq1(int nWidth, int nHeight, BYTE *lpInput, BYTE *lpOutput){int x,y;BYTE *lpPoints=new BYTE[nWidth*nHeight];//像素点的个数GetPoints(nWidth,nHeight,lpInput,lpPoints); //lpPoints存的是颜色值int r[256],s[256]; //颜色值数组,统计对应颜色值像素点的个数ZeroMemory(r,1024);ZeroMemory(s,1024);for(y=0;y<nHeight;y++){ //统计对应颜色值像素点的个数,Point(x,y)是lpPoints(x,y)for(x=0;x<nWidth;x++){r[Point(x,y)]++;}}s[0]=r[0];for(y=1;y<256;y++){s[y]=s[y-1];s[y]+=r[y];} //计算颜色值的前y种颜色的总像素点的个数(像素点颜色值<=y)for(y=0;y<nHeight;y++){ //将计算对应点的像素值,直方图均匀化的结果保存在lpPointsfor(x=0;x<nWidth;x++){Point(x,y)=s[Point(x,y)]*255/nWidth/nHeight;}}PutPoints(nWidth,nHeight,lpOutput,lpPoints); //输出lpPoints到lpOutputdelete lpPoints;}void CHistDemoADlg::OnBnClickedClose(){// TODO: 在此添加控件通知处理程序代码//ExitProcess(0);//注意使用时先释放分配的内存,以免造成内存泄露//exit(0) ;//正常终止程序; exit(非0)非正常终止程序PostQuitMessage(0);//最常用}void CHistDemoADlg::OnBnClickedMeanfilter(){// TODO: 在此添加控件通知处理程序代码if (lpBitmap==0) return;BYTE *lpOutput=new BYTE[nByteWidth*nHeight];MeanFilter(nWidth,nHeight,lpBits,lpOutput);(nWidth,nHeight,lpOutput); //在直方图均衡化的区域显示结果delete lpOutput;NoColor(); //将原始图像转换成灰度图像}void CHistDemoADlg::MeanFilter (int nWidth,int nHeight,BYTE *lpInput,BYTE *lpOutput){int x,y;BYTE *lpPoints=new BYTE[nWidth*nHeight];//像素点的个数BYTE *lpPoints1 = new BYTE[(nWidth+2)*(nHeight+2)];GetPoints(nWidth,nHeight,lpInput,lpPoints); //lpPoints存的是颜色值for(y=1;y<nHeight+1;y++){ //中间最整块图像的拷贝for(x=1;x<nWidth;x++){Point1(x,y) = Point(x-1,y-1);//lpPoints1[y][x] = lpPoints[y-1][x-1];}}for(y=1;y<nHeight+1;y++){ //最左边和最右边一列的拷贝Point1(0,y) = Point(0,y-1);Point1(nWidth+1,y) = Point(nWidth-1,y-1);//lpPoints1[y][0] = lpPoints[y-1][0];//lpPoints1[y][nWidth+1] = lpPoints[y-1][nWidth-1];}for(x=0;x<nWidth+2;x++){ //最上边和最下边一行的拷贝Point1(x,0) = Point1(x,1);Point1(x,nHeight+1) = Point1(x,nHeight);//lpPoints1[0][x] = lpPoints1[1][x];//lpPoints1[nHeight+1][x] = lpPoints1[nHeight][x];}for(y=0;y<nHeight;y++){ //求以某点为中心的九个数平均值for (x=0;x<nWidth;x++){Point(x,y) = ( Point1(x,y) + Point1(x+1,y) + Point1(x+2,y) +Point1(x,y+1) + Point1(x+1,y+1) + Point1(x+2,y+1) +Point1(x,y+2) + Point1(x+1,y+2) + Point1(x+2,y+2) )/9;/*lpPoints[y][x] = (lpPoints1[y][x] + lpPoints1[y][x+1] + lpPoints1[y][x+2] +lpPoints1[y+1][x] + lpPoints1[y+1][x+1] + lpPoints1[y+1][x+2] +lpPoints1[y+2][x] + lpPoints1[y+2][x+1] + lpPoints1[y+2][x+2])/9;*/}}PutPoints(nWidth,nHeight,lpOutput,lpPoints); //输出lpPoints到lpOutputdelete lpPoints;}void CHistDemoADlg::MedianFilter(int nWidth,int nHeight,BYTE *lpInput,BYTE *lpOutput){int x,y;BYTE *lpPoints=new BYTE[nWidth*nHeight];//像素点的个数BYTE *lpPoints1 = new BYTE[(nWidth+2)*(nHeight+2)];GetPoints(nWidth,nHeight,lpInput,lpPoints); //lpPoints存的是颜色值for(y=1;y<nHeight+1;y++){ //中间一整块拷贝for(x=1;x<nWidth;x++){Point1(x,y) = Point(x-1,y-1);}}for(y=1;y<nHeight+1;y++){ //最左边和最右边一列的拷贝Point1(0,y) = Point(0,y-1);Point1(nWidth+1,y) = Point(nWidth-1,y-1);}for(x=0;x<nWidth+2;x++){ //最上边和最下边一行的拷贝Point1(x,0) = Point1(x,1);Point1(x,nHeight+1) = Point1(x,nHeight);}BYTE *window = new BYTE[9];for(y=0;y<nHeight;y++){for (x=0;x<nWidth;x++){int k = 0;for(int i=y ; i <= y+2 ; i++){for(int j=x ; j <= x+2; j++){if(k < 9)window[k++] = Point1(j,i);}}for (int m = 0; m < 5; ++m) //求9个数的中值,window[4]为中值{int min = m;for (int n = m + 1; n < 9; ++n)if (window[n] < window[min])min = n;// Put found minimum element in its placeBYTE temp = window[m];window[m] = window[min];window[min] = temp;}Point(x,y) = window[4];}}PutPoints(nWidth,nHeight,lpOutput,lpPoints); //输出lpPoints到lpOutputdelete lpPoints;}void CHistDemoADlg::OnBnClickedMedianfilter(){// TODO: 在此添加控件通知处理程序代码if (lpBitmap==0) return;BYTE *lpOutput=new BYTE[nByteWidth*nHeight];MedianFilter(nWidth,nHeight,lpBits,lpOutput);(nWidth,nHeight,lpOutput); //在中值滤波的区域显示结果delete lpOutput;NoColor(); //将原始图像转换成灰度图像}类继承自CWnd主要是图像显示方面的函数,如水平滚轮和垂直滚轮的事件函数,以及绘制函数OnPaint(),初始化函数等等,以及存放需要绘制的图像信息的成员变量。

数字图像处理(实验3)

数字图像处理(实验3)

昆明理工大学信息工程与自动化学院学生实验报告(2015 —2016 学年第一学期)课程名称:数字图像处理开课实验室:系机房444 2015 年 11月 11日年级、专业、班计科133 学号 201310405325 姓名黄枫成绩实验项目名称图像空间滤波指导教师张云教师评语该同学是否了解实验内容与要求:A.了解□ B.基本了解□ C.不了解□该同学的实验能力: A.强□ B.中等□ C.差□该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□实验报告是否规范: A.规范□ B.基本规范□ C.不规范□是否有运行结果与分析: A.详细□ B.一般□ C.没有□是否有总结与体会: A.详细□ B.一般□ C.没有□教师签名:年月日一、实验的目的1、理解空间滤波的概念,掌握模板卷积的计算方法;2、掌握平滑空间滤波器方法,并会用其来消除图像噪声;3、掌握锐化空间滤波器方法,并会用其来增强图像细节。

二、实验原理及基本技术路线图(方框原理图)图像增强是将原来不清晰的画面变得清晰或强调某些关注的特征,抑制非关注的特征,使之改善视觉质量、丰富信息量,加强图像判读和识别效果的图像处理方法。

在图像采集过程中不可避免的混入了噪声,这种实际得到的图像视觉品质有待进一步提高。

为此,利用图像增强算法来消除图像中的噪声,突出图像中目标物体的某些特点,都将有利于对图像中目标的描述、识别和理解。

按照图像空间的不同,增强处理可分为两类:空域增强及频率增强。

前者采用模板卷积,直接在图像所在的二维空间域进行增强处理,即增强构成图像的像素,包括图像平滑和图像锐化等。

模板运算是空间域图象增强的方法,也叫模板卷积。

平滑采用低通滤波(即只让低频信号通过)的方法,可去掉图像中的噪声;锐化采用高通滤波(即只让高频信号通过)的方法,则可增强边缘等高频信号,使模糊的图像变得清晰。

三、所用仪器、材料(设备名称、型号、规格等)微型计算机一台、Matlab 软件。

数字图像处理上机实验报告(基于Matlab)

数字图像处理上机实验报告(基于Matlab)
图像的除法
除法运算可用于校正成像设备的非线性影响。MATLAB中调用imdivide函数进行两幅图像相除。调用格式如下:
Z=imdivide(X,Y),其中Z=X÷Y。
图像四则运算
因对uint8、uintl6数据,每步运算都要进行数据截取,将会减少输出图像的信息量。图像四则运算较好的办法是使用函数imlincomb。该函数按双精度执行所有代数运算操作,仅对最后的输出结果进行截取,该函数的调用格式如下:
s=uint8(real(ifft2(s)));
subplot(2,3,4),imshow(h);title('传递函数'); %显示GHPF滤波器的传递函数
subplot(2,3,5),imshow(s); title('ILPF滤波(d0=50)'); %显示ILPF滤波后的图像
运行结果窗口截图:
第二次实验
1.图像复原算法
图像在形成、传输和记录过程中,由于受到多种原因的影响,图像的质量就会有所下降,典型的表现为图像模糊、失真、有噪声等,这一过程称为图像的退化。
图像复原是试图利用退化过程的先验知识使已退化的图像恢复本来面目,即根据退化的原因,分析引起退化的环境因素,建立相应的数学模型,并沿着使图像降质的逆过程恢复图像。目的在于消除或减轻在图像获取以及传输的过程中造成的图像品质下降,恢复图像的本来面目。因此,复原技术就是把退化模型化,并采用相反的过程进行处理,以便尽可能复原被退化图像的本来面目。
C=A(:,:,1); %取单色%
D=B(:,:,1);
figure('Name','图像逻辑运算')
res1=C&D; %C&D%
res2=C|D; %C|D%

数字图像处理上机实验三

数字图像处理上机实验三

医学图像处理实验三1、计算图像的梯度,梯度值和梯度角。

I=imread('C:\Users\Administrator\Desktop\cat.j pg');B=rgb2gray(I);C=double(B);e=1e-6;%10^-6[dx,dy]=gradient(C);%计算梯度G=sqrt(dx.*dx+dy.*dy);%梯度幅值figure,imshow(uint8(G)),title('梯度图像');pha=atan(dy./(dx+e))figure,imshow(pha,[])图 1图 2 梯度角图2、计算图像边缘检测,用滤波器方式实现各种算子。

(1)Roberts算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);[m,n]=size(B);nB=B;robertsnum=0;%经roberts算子计算得到的每一个像素的值robertsthreshold=0.6;%设定阈值for j=1:m-1;%进行边界提取for k=1:n-1robertsnum=abs(B(j,k)-B(j+1,k+1))+abs(B(j+1,k)-B(j,k+1)); if(robertsnum>robertsthreshold)nB(j,k)=255;elsenB(j,k)=0;endendendsubplot(1,2,1);imshow(B);title('原图');subplot(1,2,2);imshow(nB,[]);title('Robert算子处理后的图像');图 3(2)Sobel算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);[m,n]=size(B);f=double(B);u=double(B);usobel=B;for i=2:m-1%sobel边缘检测for j=2:n-1;gx=(u(i+1,j-1)+2*u(i+1,j)+f(i+1,j+1)-(u(i-1,j-1)+2*u(i-1,j)+f(i-1,j+1)));gy=(u(i-1,j+1)+2*u(i,j+1)+f(i+1,j+1)-(u(i-1,j-1)+2*u(i,j-1)+f(i+1,j-1)));usobel(i,j)=sqrt(gx^2+gy^2);endendsubplot(1,2,1);imshow(B);title('原图');subplot(1,2,2);imshow(im2uint8(usobel));title('Sobel边缘检测后的图像');图 4(3)Prewitt算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);[m,n]=size(B);nB=B;prewittnum=0;%经prewitt算子计算得到的每一个像素的值prewittthreshold=0.6;%设定阈值for j=2:m-1;%进行边界提取for k=2:n-1prewittnum=abs(B(j-1,k+1)-B(j+1,k+1))+B(j-1,k)-B(j+1,k)+B(j-1,k-1)-B(j+1,k-1)+abs(B(j-1,k +1)+B(j,k+1)+B(j+1,k+1)-B(j-1,k-1)-B(j,k-1)-B(j+1,k-1));if(prewittnum>prewittthreshold)nB(j,k)=255;elsenB(j,k)=0;endendendsubplot(1,2,1);imshow(B);title('原图');subplot(1,2,2);imshow(nB,[]);title('Prewitt算子处理后的图像');图 5(4)Laplace边缘检测function flapEdge=LaplaceEdge(pic,Moldtype,thresh)[m,n]=size(pic);flapEdge=zeros(m,n);%四邻域拉普拉斯边缘检测算子if 4==Moldtypefor i=2:m-1for j=2:n-1temp=-4*pic(i,j)+pic(i-1,j)+pic(i+1,j)+pic(i,j-1)+pic(i,j+1);if temp>threshflapEdge(i,j)=255;elseflapEdge(i,j)=0;endendendend%八邻域拉普拉斯边缘检测算子if 8==Moldtypefor i=2:m-1for j=2:n-1temp=-8*pic(i,j)+pic(i-1,j)+pic(i+1,j)+pic(i,j-1)+pic(i,j+1)+pic(i-1, j-1)+pic(i+1,j+1)+pic(i+1,j-1)+pic(i-1,j+1);if temp>threshflapEdge(i,j)=255;elseflapEdge(i,j)=0;endendendend主函数:clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);C=double(B);t=60;Lapmodtype=8;%设置模板方式flapEdge=LaplaceEdge(C,Lapmodtype,t); fgrayLapedge=uint8(flapEdge);figure()imshow(fgrayLapedge),title('laplace边缘检测图像');图 6(4)Kirsch算子clearclcclose allI=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);figure(1)imshow(B,[])title('原始图象')%对图象进行均值滤波bw2=filter2(fspecial('average',3),B);%对图象进行高斯滤波bw3=filter2(fspecial('gaussian'),bw2);%利用小波变换对图象进行降噪处理[thr,sorh,keepapp]=ddencmp('den','wv',bw3); %获得除噪的缺省参数bw4=wdencmp('gbl',bw3,'sym4',2,thr,sorh,keepapp);%图象进行降噪处理%---------------------------------------------------------------------%提取图象边缘t=3000; %设定阈值bw5=double(bw4);[m,n]=size(bw5);g=zeros(m,n);d=zeros(1,8);%利用Kirsch算子进行边缘提取for i=2:m-1for j=2:n-1d(1)=(5*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i,j+1 )-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(2)=((-3)*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i, j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(3)=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i, j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)+5*bw5(i+1,j+1))^2;d(4)=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i, j+1)-3*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2;d(5)=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i, j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2;d(6)=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i, j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(7)=(5*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1 )+5*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(8)=(5*bw5(i-1,j-1)+5*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2; g(i,j) = max(d);endend%显示边缘提取后的图象for i=1:mfor j=1:nif g(i,j)>tbw5(i,j)=255;elsebw5(i,j)=0;endendendfigure(2)imshow(bw5,[])title('Kirsch ')图7(5)LoG和canny算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);bw1=edge(B,'log',0.01);bw3=edge(B,'canny',0.1);figure;subplot(1,2,1);imshow(bw1,[]);title('loG边缘检测');subplot(1,2,2);imshow(bw3,[]);title('canny边缘检测');图83、大津法实现图像分割clear;I=imread('C:\Users\admin\Desktop\cat.jpg');B=rgb2gray(I);T = graythresh(B);%求阈值BW = im2bw(B,T);%二值化imshow(BW,[])图9。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

医学图像处理实验三1、计算图像的梯度,梯度值和梯度角。

I=imread('C:\Users\Administrator\Desktop\cat.jpg'); B=rgb2gray(I);C=double(B);e=1e-6;%10^-6[dx,dy]=gradient(C);%计算梯度G=sqrt(dx.*dx+dy.*dy);%梯度幅值figure,imshow(uint8(G)),title('梯度图像');pha=atan(dy./(dx+e))figure,imshow(pha,[])图 1图 2 梯度角图2、计算图像边缘检测,用滤波器方式实现各种算子。

(1)Roberts算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);[m,n]=size(B);nB=B;robertsnum=0;%经roberts算子计算得到的每一个像素的值robertsthreshold=0.6;%设定阈值for j=1:m-1;%进行边界提取for k=1:n-1robertsnum=abs(B(j,k)-B(j+1,k+1))+abs(B(j+1,k)-B(j,k+1)); if(robertsnum>robertsthreshold)nB(j,k)=255;elsenB(j,k)=0;endendendsubplot(1,2,1);imshow(B);title('原图');subplot(1,2,2);imshow(nB,[]);title('Robert算子处理后的图像');图 3(2)Sobel算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);[m,n]=size(B);f=double(B);u=double(B);usobel=B;for i=2:m-1%sobel边缘检测for j=2:n-1;gx=(u(i+1,j-1)+2*u(i+1,j)+f(i+1,j+1)-(u(i-1,j-1)+2*u(i-1,j)+f(i-1,j+1)));gy=(u(i-1,j+1)+2*u(i,j+1)+f(i+1,j+1)-(u(i-1,j-1)+2*u(i,j-1)+f(i+1,j-1)));usobel(i,j)=sqrt(gx^2+gy^2);endendsubplot(1,2,1);imshow(B);title('原图');subplot(1,2,2);imshow(im2uint8(usobel));title('Sobel边缘检测后的图像');图 4(3)Prewitt算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);[m,n]=size(B);nB=B;prewittnum=0;%经prewitt算子计算得到的每一个像素的值prewittthreshold=0.6;%设定阈值for j=2:m-1;%进行边界提取for k=2:n-1prewittnum=abs(B(j-1,k+1)-B(j+1,k+1))+B(j-1,k)-B(j+1,k)+B(j-1,k-1)-B(j+1,k-1)+abs(B(j-1,k +1)+B(j,k+1)+B(j+1,k+1)-B(j-1,k-1)-B(j,k-1)-B(j+1,k-1));if(prewittnum>prewittthreshold)nB(j,k)=255;elsenB(j,k)=0;endendendsubplot(1,2,1);imshow(B);title('原图');subplot(1,2,2);imshow(nB,[]);title('Prewitt算子处理后的图像');图 5(4)Laplace边缘检测function flapEdge=LaplaceEdge(pic,Moldtype,thresh)[m,n]=size(pic);flapEdge=zeros(m,n);%四邻域拉普拉斯边缘检测算子if 4==Moldtypefor i=2:m-1for j=2:n-1temp=-4*pic(i,j)+pic(i-1,j)+pic(i+1,j)+pic(i,j-1)+pic(i,j+1);if temp>threshflapEdge(i,j)=255;elseflapEdge(i,j)=0;endendendend%八邻域拉普拉斯边缘检测算子if 8==Moldtypefor i=2:m-1for j=2:n-1temp=-8*pic(i,j)+pic(i-1,j)+pic(i+1,j)+pic(i,j-1)+pic(i,j+1)+pic(i-1, j-1)+pic(i+1,j+1)+pic(i+1,j-1)+pic(i-1,j+1);if temp>threshflapEdge(i,j)=255;elseflapEdge(i,j)=0;endendendend主函数:clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);C=double(B);t=60;Lapmodtype=8;%设置模板方式flapEdge=LaplaceEdge(C,Lapmodtype,t); fgrayLapedge=uint8(flapEdge);figure()imshow(fgrayLapedge),title('laplace边缘检测图像');图 6(4)Kirsch算子clearclcclose allI=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);figure(1)imshow(B,[])title('原始图象')%对图象进行均值滤波bw2=filter2(fspecial('average',3),B);%对图象进行高斯滤波bw3=filter2(fspecial('gaussian'),bw2);%利用小波变换对图象进行降噪处理[thr,sorh,keepapp]=ddencmp('den','wv',bw3); %获得除噪的缺省参数bw4=wdencmp('gbl',bw3,'sym4',2,thr,sorh,keepapp);%图象进行降噪处理%---------------------------------------------------------------------%提取图象边缘t=3000; %设定阈值bw5=double(bw4);[m,n]=size(bw5);g=zeros(m,n);d=zeros(1,8);%利用Kirsch算子进行边缘提取for i=2:m-1for j=2:n-1d(1)=(5*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i,j+1 )-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(2)=((-3)*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i, j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(3)=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i, j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)+5*bw5(i+1,j+1))^2;d(4)=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i, j+1)-3*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2;d(5)=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i, j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2;d(6)=((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i, j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(7)=(5*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1 )+5*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;d(8)=(5*bw5(i-1,j-1)+5*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1 )-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;g(i,j) = max(d);endend%显示边缘提取后的图象for i=1:mfor j=1:nif g(i,j)>tbw5(i,j)=255;elsebw5(i,j)=0;endendendfigure(2)imshow(bw5,[])title('Kirsch ')图7(5)LoG和canny算子clear;I=imread('C:\Users\admin\Desktop\mao.jpg');B=rgb2gray(I);bw1=edge(B,'log',0.01);bw3=edge(B,'canny',0.1);figure;subplot(1,2,1);imshow(bw1,[]);title('loG边缘检测'); subplot(1,2,2);imshow(bw3,[]);title('canny边缘检测');图83、大津法实现图像分割clear;I=imread('C:\Users\admin\Desktop\cat.jpg');B=rgb2gray(I);T = graythresh(B);%求阈值BW = im2bw(B,T);%二值化imshow(BW,[])图9。

相关文档
最新文档