程序.docx

上传人:b****3 文档编号:4166082 上传时间:2023-05-06 格式:DOCX 页数:48 大小:1.94MB
下载 相关 举报
程序.docx_第1页
第1页 / 共48页
程序.docx_第2页
第2页 / 共48页
程序.docx_第3页
第3页 / 共48页
程序.docx_第4页
第4页 / 共48页
程序.docx_第5页
第5页 / 共48页
程序.docx_第6页
第6页 / 共48页
程序.docx_第7页
第7页 / 共48页
程序.docx_第8页
第8页 / 共48页
程序.docx_第9页
第9页 / 共48页
程序.docx_第10页
第10页 / 共48页
程序.docx_第11页
第11页 / 共48页
程序.docx_第12页
第12页 / 共48页
程序.docx_第13页
第13页 / 共48页
程序.docx_第14页
第14页 / 共48页
程序.docx_第15页
第15页 / 共48页
程序.docx_第16页
第16页 / 共48页
程序.docx_第17页
第17页 / 共48页
程序.docx_第18页
第18页 / 共48页
程序.docx_第19页
第19页 / 共48页
程序.docx_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

程序.docx

《程序.docx》由会员分享,可在线阅读,更多相关《程序.docx(48页珍藏版)》请在冰点文库上搜索。

程序.docx

程序

%将图片转化为二值图,根据直方图,以75分界4

if(I(i,j)>75)4

Otsu阈值:

4

谐波均值滤波器5

(三)利用直方图人工指定阈值对rice进行自动单阈值分割;7

滤波器8

(二)对图像加噪后分别使用MATLAB自带函数和自写函数进行平滑滤波,观察实验结果。

9

(三)自写函数实现对图像的锐化操作。

9

(四)分别使用最大值、最小值和中值滤波器对图像进行处理10

最小值:

11

中值:

12

(五)分别使用理想和巴特沃斯高低通滤波器对图像进行滤波(高斯噪声)12

图像灰度变换13

%对数变换14

3,反色变换14

4.灰度图像均衡化15

点检测15

阈值16

Sobel17

%LOG17

%Canny17

(一)调入给定的数字图像,并进行计算机均衡化处理,显示原图像的直方图和经过均衡化处理过的图像直方图。

19

(二)对图像加噪后分别使用MATLAB自带函数和自写函数进行平滑滤波,20

运用拉普拉斯算子梯度增强法进行图像锐化21

%最大值滤波器21

最小值:

22

%中值23

PSF25

2、灰度直方图均衡规格化26

程序二:

filter和conv的不同28

程序三:

滤波后信号幅度的变化28

MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:

29

MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:

29

Y=filter2(h,X)29

Fspecial函数用于创建预定义的滤波算子30

ordfilt2函数30

图像的点运算:

30

加法运算:

rice和cameraman31

3、flower变模糊31

4、减法运算:

ri32

乘法运算32

缩放运算33

图像翻转34

图像剪切 34

%将图片转化为二值图,根据直方图,以75分界

I=imread('Cameraman.bmp');

[mn]=size(I);

fori=1:

m

forj=1:

n

if(I(i,j)>75)

I(i,j)=255;%大于75,都变成背景色

else

I(i,j)=0;

end

end

end

imshow(I);

Otsu阈值:

I=imread('zhiwen.gif');

[T,SM]=graythresh(I);%otsu自动计算阈值函数,SM是可分性测度

g=im2bw(I,T)

figure,imshow(g)

谐波均值滤波器

图像分割与边缘检测

(二)用各梯度算子对图像进行边缘检测;

i=imread('rice1.jpg');

g=rgb2gray(i);

d=im2double(i);

subplot(131),imshow(i),title(‘原图');

[gv,t]=edge(g,'sobel',0.075,'horizontal');%II是输入图像,Sobel是运用的方法,parameters是参数g是一个数组,t是edge用于确定参数,T是阈值,dir(vertical)是检测的首选方向subplot(132),imshow(gv),title('水平方向');

[gv,t]=edge(g,'sobel',0.9,'horizontal');

subplot(133),imshow(gv),title('水平方向');

%LOG

i=imread('rice1.jpg');

g=rgb2gray(i);

d=im2double(i);

subplot(131),imshow(i),title('原图');

[gv,t]=edge(g,'log',0.005,2.25);

subplot(132),imshow(gv),title('高斯拉普拉斯LOG');

[gv,t]=edge(g,'log',0.1,2.25);%2.25是代表标准差。

默认为2

subplot(133),imshow(gv),title('高斯拉普拉斯LOG');

%Canny边缘检测器

i=imread('rice1.jpg');

g=rgb2gray(i);

d=im2double(i);

subplot(131),imshow(i),title('原图');

[gv,t]=edge(g,'canny',[0.040.1],1.5);%[0.040.1]是两个阈值,1.5是平面滤波的标准差,默认值为1

subplot(132),imshow(gv),title('Canny边缘检测器');

(四)用迭代法和OSTU法对rice进行自动单阈值分割;

x=imread('Lena.bmp');

%figure;%imshow(x);

[m,n]=size(x);

N=m*n;

num=zeros(1,256);

p=zeros(1,256);

fori=1:

m

forj=1:

n

num(x(i,j)+1)=num(x(i,j)+1)+1;

end

end

fori=0:

255;p(i+1)=num(i+1)/N;

end

totalmean=0;

fori=0:

255;

totalmean=totalmean+i*p(i+1);

end

maxvar=0;

fork=0:

255kk=k+1;

zerosth=sum(p(1:

kk));

firsth=0;

forh=0:

k

firsth=firsth+h*p(h+1);

end

var=totalmean*zerosth-firsth;

var=var*var;

var=var/(zerosth*(1-zerosth)+0.01);

var=sqrt(var);

if(var>maxvar)

maxvar=var;

point=k;

end

end

threshold=point;

I=imread('Lena.bmp');

%I=rgb2gray(I);

I=double(I);

T=double(min(I(:

))+max(I(:

)))/2;

done=false;

i=0;

while~done

r1=find(I<=T);

r2=find(I>T);

Tnew=(mean(I(r1))+mean(I(r2)))/2;

done=abs(Tnew-T)<1;

T=Tnew;

i=i+1;

end

I(r1)=0;

I(r2)=1;

disp('迭代法求得的阈值')

disp(T)

imshow(I),title('迭代法')

(三)利用直方图人工指定阈值对rice进行自动单阈值分割;

I1=imread('Cameraman.bmp');

subplot(131);imshow(I1);title('原图');

I=im2bw(I1);

subplot(132);imhist(I1);title('直方图');

[mn]=size(I1);

fori=1:

m

forj=1:

n

if(I1(i,j)>75)

I1(i,j)=255;%大于75,都变成背景色

else

I1(i,j)=0;

end

end

end

subplot(133);imshow(I1);title('分割以后图');

滤波器

调入给定的数字图像,并进行计算机均衡化处理,显示原图像的直方图和经过均衡化处理过的图像直方图。

观察均衡化后图像和直方图的变化。

结果如图。

I1=imread('flower.jpg');

subplot(4,3,1),imshow(I1);%显示原图

I=rgb2gray(I1);

subplot(4,3,2),imshow(I);%将彩色图转化为灰度图

subplot(4,3,3),imhist(I,50);%每隔50隔像素点统计一次

h=histeq(I);%均衡化,,画图片的直方图

subplot(4,3,4),imshow(h);

subplot(4,3,5),imhist(h);%显示均衡化以后的图像

(二)对图像加噪后分别使用MATLAB自带函数和自写函数进行平滑滤波,观察实验结果。

%2平滑滤波%自带函数

I=imread('Lena.bmp');

i=imnoise(I,'salt');%加盐噪

subplot(2,2,1),imshow(i);

h=fspecial('average');%3*3的邻域平均模板,生成均值滤波器

y=imfilter(i,h);%对图像进行滤波

subplot(2,2,2),imshow(y);

%2平滑滤波%自写函数

I=imread('Lena.bmp');

i=imnoise(I,'salt');%加盐噪

subplot(2,2,1),imshow(i);

Inew=myMidalp(i,3);%调用函数

subplot(2,2,3),imshow(Inew)

(三)自写函数实现对图像的锐化操作。

运用拉普拉斯算子梯度增强法进行图像锐化

[I,map]=imread('Lena.bmp');

Subplot(1,2,1)imshow(I,map);%map:

映射

I=double(I);

[Gx,Gy]=gradient(I);%计算梯度

G=sqrt(Gx.*Gx+Gy.*Gy);%注意是矩阵点乘

J=I;

K=find(G<=7);%查找非零元素

J(K)=25;Q=find(G>=7);

J(Q)=255;

Subplot(1,2,2),imshow(J,map);

(4)分别使用最大值、最小值和中值滤波器对图像进行处理,观察实验结果。

最大值:

%最大值滤波器

I2=imread('flower.jpg');

I1=rgb2gray(I2);

n=2;c=2;

mask=ones(n,n);

[r1,c1]=size(I1);

subplot(2,2,1);imshow(I2);title('原始图像');

subplot(2,2,2);imshow(I1);title('灰度图像');

I1=double(I1);

I1_max=I1;

mid=floor(n/2);

foru=1:

r1-n+1

forv=1:

c1-n+1

A=I1(u:

u+n-1,v:

v+n-1);

A=A.*mask;

I1_max(u+mid,v+mid)=max(max(A));

end

end

subplot(2,2,3);imshow(I1_max(mid+1:

r1-mid,mid+1:

c1-mid),[]);title('最大值图像');

 

最小值:

%最小值滤波器

I2=imread('flower.jpg');

I1=rgb2gray(I2);

n=2;c=2;

mask=ones(n,n);

[r1,c1]=size(I1);

subplot(2,2,1);imshow(I2);title('原始图像');

subplot(2,2,2);imshow(I1);title('灰度图像');

I1=double(I1);

I1_min=I1;

mid=floor(n/2);%floor:

向下取整

foru=1:

r1-n+1

forv=1:

c1-n+1

A=I1(u:

u+n-1,v:

v+n-1);

A=A.*mask;

I1_min(u+mid,v+mid)=min(min(A));

end

end

subplot(2,2,3);imshow(I1_min(mid+1:

r1-mid,mid+1:

c1-mid),[]);title('最小值图像');

中值:

I=imread('Lena.bmp');

noise=imnoise(I,'salt');

figure,imshow(noise);

Inew=myMidal(noise,3);

figure,imshow(Inew);

(五)分别使用理想和巴特沃斯高低通滤波器对图像进行滤波(高斯噪声),讨论阈值的设定和阶数的选取。

clc;

I=imread('Lena.bmp');%读图

F=fft2(I);%傅里叶变换,变为频域内的图

newF=fftshift(F);%移频

[MN]=size(I);%获取图像的大小

d0=100;

%M=60;N=60;

c1=floor(M/2);%原点

c2=floor(N/2);

h1=zeros(M,N);%理想型

%h2=zeros(M,N);%巴特沃斯型

%h3=zeros(M,N);%高斯型

%sigma=4;

%n=4;%巴特沃斯阶数

fori=1:

M

forj=1:

N

d=sqrt((i-c1)^2+(j-c2)^2);

ifd<=d0

h1(i,j)=1;%若为低通,则为0

else

h1(i,j)=0;%若为低通,则为1

end

%h2(i,j)=1/(1+(d/d0)^(2*n));

%h3(i,j)=exp(-d^2/(2*sigma^2));

end

end

A=h1.*newF;%相当于Guv

B=ifft2(A);%相当于Gxy

imshow(log(abs(B)),[]);

draw2(h1,'理想型');

%draw2(h2,'巴特沃斯');

%draw2(h3,'高斯');

图像灰度变换

一些常用灰度变换Matlab程序以及图像处理效果图

1,二值化和阈值处理

%图像二值化(选取一个域值,(5)将图像变为黑白图像)

I=imread('C:

\DocumentsandSettings\Administrator\桌面\DIP-E1增强\DIP-E1增强\p12.tif');

bw=im2bw(I,0.5);%选取阈值为0.5

subplot(1,3,1);

imshow(I);

title('原图');

subplot(1,3,2);

imshow(bw);

title('显示二值图像');

J=find(I<150);

I(J)=0;

J=find(I>=150);

I(J)=255;

subplot(1,3,3);

imshow(I);

title('图像二值化(域值为150)');

2非线性变换

%对数变换

I=imread('C:

\DocumentsandSettings\Administrator\桌面\DIP-E1增强\DIP-E1增强\p12.tif');

I=mat2gray(I);%对数变换不支持uint8类型数据,将一个矩阵转化为灰度图像的数据格式(double)

J=log(I+1);

subplot(1,2,1);

Imshow(I);%显示图像

title('原图');

subplot(1,2,2);

Imshow(J);

title('对数变换后的图像')

3,反色变换

I1=imread('C:

\DocumentsandSettings\Administrator\桌面\DIP-E1增强\DIP-E1增强\p12.tif');

figure,imshow(I);

title('原始图像');

I2=imcomplement(I1);

figure,imshow(I2);

title('反色后图像');

4.灰度图像均衡化

I=imread('C:

\DocumentsandSettings\Administrator\桌面\DIP-E1增强\DIP-E1增强\p12.tif');

J=histeq(I);

subplot(1,2,1),imshow(I);

subplot(1,2,2),imshow(J);

figure,subplot(1,2,1),imhist(I,64);

subplot(1,2,2),imhist(J,64);

点检测

myMidal.m

function[d]=myMidal(x,n)

%x是给定的图像,n是滤波器的大小;本函数实现中值滤波

[heigthwidth]=size(x);

x1=double(x);

x2=x1;%x2就是原图像,模板每滑动一次,就用加权平均值修改

fori=1:

width-n+1

forj=1:

heigth-n+1

c=x1(i:

i+n-1,j:

j+n-1);%矩阵n行*n列模板,i:

i+n-1是n行,c就是模板划过的区域

mm=-sum(sum(c))+9*c(1+(n-1)/2,1+(n-1)/2);%第一次求和,是按列求和。

得到一个行向量,,向量的基础上都求和sum,在i行j列中取中间值的坐标是i+(n-1)/2,j+(n-1)/2

%e=reshape(c,1,n*n);%将c变成向量

%mm=median(e);%取中间值

x2(i+(n-1)/2,j+(n-1)/2)=mm;%模板中间坐标,i+(n-1)/2表示行号,j+(n-1)/2是列号

end

end

x3=x2(2:

height-1,2:

width-1);%去掉最外面的一行一列

figure,imshow(uint8(x3));%double是用来计算的,,uint是用来直接显示的

%T=max(max(abs(x3)));%最大梯度的矩阵,每一列求出一个最大值,得到一个行矩阵,再求一次最大值

T=20;

[mn]=size(x3);%比max小的都是0

fori=1:

m

forj=1:

n

if((abs(i,j))

else

x3(i,j)=0;

end

end

end

d=uint8(x3);%二值图的梯度图

myMidalfiler.m

clc;

I=imread('flower,jpg');

[mn]=size(I);

figure,imshow(I);

%I=I(10:

m-10,10:

n-10);%截取从第10行,到m-10行

%I(60,70)=0%在60行70列加一个黑点,直接赋值为0

%imwrite(I,'flower,jpg');

newI=myMidal(I,3);

figure,imshow(newI);

阈值

I1=imread('Cameraman.bmp');

subplot(131);imshow(I1);title('原图');

I=im2bw(I1);

subplot(132);imhist(I1);title('直方图');

[mn]=size(I1);

fori=1:

m

forj=1:

n

if(I1(i,j)>75)

I1(i,j)=255;%大于75,都变成背景色

else

I1(i,j)=0;

end

end

end

subplot(133);imshow(I1);title('分割以后图');

Sobel

i=imread('rice1.jpg');

g=rgb2gray(i);

d=im2double(i);

subplot(131),imshow(i),title('原图');

[gv,t]=edge(g,'sobel',0.075,'horizontal');%I是输入图像,Sobel是运用的方法,parameters是参数

%g是一个数组,t是edge用于确定参数,T是阈值,dir(vertical)是检测的首选方向

subplot(132),imshow(gv),title('水平方向');

[gv,t]=edge(g,'sobel',0.9,'horizontal');

subplot(133),imshow(gv),title('水平方向');

%LOG

i=imread('rice1.jpg');

g=rgb2gray(i);

d=im2double(i);

subplot(131),imshow(i),title('原图');

[gv,t]=edge(g,'log',0.005,2.25);

subplot(132),imshow(gv),title('高斯拉普拉斯LOG');

[gv,t]=edge(g,'log',0.1,2.25);%2.25是代表标准差。

默认为2

subplot(133),imshow(gv),title('高斯拉普拉斯LOG');

%Canny

i=imread('rice1.jpg');

g=rgb2gray(i);

d=im2double(i);

subplot(131),imshow(i),title('原图');

[gv,t]=edge(g,'canny',[0.040.1],1.5);%[0.040.1]是两个阈值,1.5是平面滤波的标准差,默认值为1

subplot(132),imshow(gv),title('边缘检测器');

%(三)利用直方图人工指定阈值对rice进行自动单阈值分割;

I1=imread('Cameraman.bmp');

subplot(131);imshow(I1);title('原图');

I=im2bw(I1);

subplot(132);imhist(I1);title('直方图');

[mn]=size(I1);

fori=1:

m

forj=1:

n

if(I1(i,j)>75)

I1(i,j)=255;%大于75,都变成背景色

else

I1(i,j)=0;

end

end

end

subplot(133);imshow(I1);title('分割以后图');

%(四)用迭代法和OSTU法对rice进行自动单阈值分割;

x=imread('Lena.bmp');

%figure;%imshow(x);

[m,n]=size(x);

N=m*n;

num=zeros(1,256);

p=zeros(1,256);

fori=1:

m

forj=1:

n

num(x(i,j)+1)=num(x(i,j)+1)+1;

end

end

fori=0:

255;p(i+1)=num(i+1)/N;

end

totalmean=0;

fori=0:

255;

totalmean=totalmean+i*p(i+1);

end

maxvar=0;

fork=0:

255kk=k+1;

zerosth=sum(p(1:

kk));

firsth=0;

forh=0:

k

firsth=firsth+h*p(h+1);

end

var=total

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2