基于偏微分方程的图像处_第1页
基于偏微分方程的图像处_第2页
基于偏微分方程的图像处_第3页
基于偏微分方程的图像处_第4页
基于偏微分方程的图像处_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

clear;image_I=imread('C22.bmp');subplot(2,2,1);imshow(image_I);matrix_R(:,:,1)=image_I(:,:,1);matrix_R(:,:,2)=0;matrix_R(:,:,3)=0;subplot(2,2,2);imshow(matrix_R);title('R分量');matrix_G(:,:,2)=image_I(:,:,2);matrix_G(:,:,1)=0;matrix_G(:,:,3)=0;subplot(2,2,3);imshow(matrix_G);title('G分量');matrix_B(:,:,3)=image_I(:,:,3);matrix_B(:,:,1)=0;matrix_B(:,:,2)=0;subplot(2,2,4);imshow(matrix_B);title('B分量')clear;Image=imread('I22_256.bmp');imshow(Image);[m,n]=size(Image);image11=Image;fori=1:mforj=1:nimage12(i,j)=image11(i,n-j+1);endendforj=1:nfori=1:mimage21(i,j)=image11(m-i+1,j);image22(i,j)=image12(m-i+1,j);endendimage1=[image11,image12];image2=[image21,image22];image=[image1;image2];figureimshow(image)clear;Image=imread('I22_256.bmp');Image1=0.5*double(Image);subplot(3,2,1);imshow(Image);subplot(3,2,2);imhist(Image);subplot(3,2,3);imshow(uint8(Image1));image1=uint8(Image1);imwrite(image1,'I22_256_1.bmp')subplot(3,2,4);imhist(image1);Image_hist=histeq(image1);subplot(3,2,5);imshow(Image_hist);imwrite(Image_hist,'I22_256_2.bmp')subplot(3,2,6);imhist(Image_hist);functionlevel(image_name,N)%求一图像的水平集、线%输入参数:image_name---图像文件名%:N---阀值(0-255)ifnargin<1disp('请输入文件名!!!');return;elseifnargin<2N=128;endimage_input=imread(image_name);subplot(2,2,1);imshow(image_input);title('原图像');[size_m,size_n]=size(image_input);matrix_temp=zeros(size_m,size_n);%Çóˮƽ¼¯forrow=1:size_mforcol=1:size_nifimage_input(row,col)>Nmatrix_temp(row,col)=1;endendendsubplot(2,2,2);imshow(matrix_temp,[]);title('图像的水平集');imwrite(matrix_temp,'level_setzhan.bmp');%图像矩阵扩展赋值便于处理边界matrix_ex=zeros(size_m+2,size_n+2);forrow=1:size_mforcol=1:size_nmatrix_ex(row+1,col+1)=matrix_temp(row,col);endend%四邻域反填充得水平线matrix_new=matrix_temp;forrow=2:size_m+1forcol=2:size_n+1ifmatrix_ex(row+1,col)==0&matrix_ex(row-1,col)==0&matrix_ex(row,col+1)==0&matrix_ex(row,col-1)==0matrix_new(row-1,col-1)=1;endendendsubplot(2,2,3);imshow(matrix_new,[]);title('图像的水平线');%imwrite(matrix_new,'level_line.bmp');%求图像的等高线contour=zeros(size_m,size_n);forrow=1:size_mforcol=1:size_nifimage_input(row,col)==Ncontour(row,col)=1;endcontour(row,col)=1-contour(row,col);endendsubplot(2,2,4);imshow(contour,[]);title('图像的等高线');%imwrite(contour,'contour.bmp');level('I22_256.bmp',100)functionlevel_line_set(image_name)%求一图像的阀值N取各值所对应的水平线的叠加%输入参数:image_name---图像文件名image_input=imread(image_name);%不变量[size_m,size_n]=size(image_input);%不变量matrix_out=zeros(size_m,size_n);%循环中不需重新初始化的变量%输出矩阵初始化(白)forrow=1:size_mforcol=1:size_nmatrix_out(row,col)=1;endendmatrix_ex=zeros(size_m+2,size_n+2);%扩展矩阵subplot(1,2,1);imshow(image_input);title('原图像');forN=1:32:255%N为相应阀值matrix_temp=zeros(size_m,size_n);%重新初始化(黑)forrow=1:size_mforcol=1:size_nifimage_input(row,col)>=Nmatrix_temp(row,col)=1;%求水平集-----endendend%图像矩阵扩展赋值便于处理边界forrow=1:size_mforcol=1:size_nmatrix_ex(row+1,col+1)=matrix_temp(row,col);endend%四邻域(黑区域填白)反填充得水平线matrix_new=matrix_temp;forrow=2:size_m+1forcol=2:size_n+1ifmatrix_ex(row+1,col)==0&matrix_ex(row-1,col)==0&matrix_ex(row,col+1)==0&matrix_ex(row,col-1)==0matrix_new(row-1,col-1)=1;%填白endendendmatrix_out=min(matrix_out,matrix_new);%各级水平线叠加endmatrix_out(1,1)=0;matrix_out(2,1)=1;subplot(1,2,2);imshow(matrix_out,[]);title('图像部分水平集的叠加');level_line_set('I22_256.bmp')Image=imread('I22_256.bmp');subplot(3,2,1);imshow(Image,[]);%原图像title('原图像');subplot(3,2,2);imhist(Image);noise_g=imnoise(Image,'gaussian',0,0.01);%增加高斯白噪声subplot(3,2,3);imshow(noise_g,[]);title('高斯白噪声');imwrite(noise_g,'I22_256_g.bmp');subplot(3,2,4);imhist(noise_g);noise_s=imnoise(Image,'salt&pepper',0.02);subplot(3,2,5);imshow(noise_s,[]);title('黑白象素点噪声(椒盐)');imwrite(noise_s,'I22_256_s.bmp')subplot(3,2,6);imhist(noise_s);functionaver_filter(Image_name,N,out_filename)%非线性平滑滤波器G1平均%输入参数文件名N为模板大小(正奇数)%读取图像-------------ifnargin<3disp('输入参数错误!!!');return;endimage=imread(Image_name);subplot(1,2,1);imshow(image,[]);title('原图像');ifisrgb(image)image=rgb2gray(image);end%图像扩展--------------[size_m,size_n]=size(image);image_ex=zeros(size_m+N-1,size_n+N-1);%赋值forrow=1:size_mforcol=1:size_nimage_ex(row+(N-1)/2,col+(N-1)/2)=image(row,col);endend%对每个象素------------------pattern_plate=zeros(N,N);%模板image_new=zeros(size_m,size_n);%滤后图像矩阵forrow=1:size_mforcol=1:size_n%取模板的元素forrow_p=1:Nforcol_p=1:Npattern_plate(row_p,col_p)=image_ex

(row+row_p-1,col+col_p-1);endend%求模板的平均值得滤后图像矩阵

image_new(row,col)=mean2(pattern_plate);endend%输出---------------subplot(1,2,2)imshow(image_new,[]);title('均值滤波图像');imwrite(uint8(image_new),out_filename)functionweight_filter(Image_name,flag,out_filename)%用各模板进行去噪和锐化%输入参数Image_name文件名%flag模板类型标志1~4ifnargin<3disp('请按参数格式输入参数!!!');return;endifflag~=1&flag~=2&flag~=3&flag~=4disp('参数flag输入错误!!!');return;endN=3;pattern_plate=zeros(N,N);%模板%各类模板ifflag==1pattern_plate=[1/91/91/9;1/91/91/9;1/91/91/9];elseifflag==2pattern_plate=[1/161/81/16;1/81/41/8;1/161/81/16];%平滑滤波器elseifflag==3pattern_plate=[0-10;-15-1;0-10];%反锐化掩蔽滤波器elseifflag==4A=1.7;pattern_plate=[0-10;-1A+5-1;0-10];%高提升滤波器end%读取图像----------image_I=imread(Image_name);ifisrgb(image_I)image_I=rgb2gray(image_I);endsubplot(1,2,1);imshow(image_I,[]);title('原图像');%图像扩展--------------[size_m,size_n]=size(image_I);image_ex=zeros(size_m+N-1,size_n+N-1);%赋值forrow=1:size_mforcol=1:size_nimage_ex(row+(N-1)/2,col+(N-1)/2)=image_I(row,col);endend%对每个象素------------------temp_plate=zeros(N,N);%模板image_new=zeros(size_m,size_n);%滤后图像矩阵forrow=1:size_mforcol=1:size_n%取模板的元素forrow_p=1:Nforcol_p=1:Ntemp_plate(row_p,col_p)=image_ex(row+row_p-1,col+col_p-1);endendimage_new(row,col)=sum(sum(temp_plate.*pattern_plate));endend%输出---------------subplot(1,2,2);imshow(uint8(image_new));title('加权线性光滑后图像');imwrite(uint8(image_new),out_filename);functionHeat_Equation(image_name,t,out_filename)%热传导方程[Ut=U0+t*Delta(U0)]%image_name:原图像文件名%t:迭代次数%out_filename:输出文件名ifnargin<3disp('请按参数格式输入参数!!!');return;endimage_I=imread(image_name);subplot(1,2,1);imshow(image_I);title('原图像');mkdir('Heat_Eq');%新建文件夹以存放过程文件cd('Heat_Eq');[size_r,size_c]=size(image_I);image_I=double(image_I);if(t>0)N=t/0.1;elseN=(-t)/0.1%每次叠代的步长为0.1endforindex=1:Nimage_ex=matrix_expand(image_I);%边界拓展diff_two_order=zeros(size_r,size_c);forrow=2:size_r+1forcol=2:size_c+1diff_two_order(row-1,col-1)=-4*image_ex(row,col)+image_ex(row-1,col)+image_ex(row+1,col)+image_ex(row,col-1)+image_ex(row-1,col+1);endendif(t>0)image_I=image_I+0.1*diff_two_order;elseimage_I=image_I-0.1*diff_two_order;endimwrite(uint8(image_I),strcat('Heat_Eq_',num2str(index),'.bmp'));endcd('..')subplot(1,2,2);imshow(uint8(image_I));ift>0title('热传导方程光滑后图像');elsetitle('Gabor锐化后的图像');endimwrite(uint8(image_I),out_filename);%-------------------------end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%functionmatrix_ex=matrix_expand(matrix)%对矩阵进行延拓[size_r,size_c]=size(matrix);matrix_ex=zeros(size_r+2,size_c+2);%中forrow=1:size_rforcol=1:size_cmatrix_ex(row+1,col+1)=matrix(row,col);endend%左,右forrow=1:size_rmatrix_ex(row+1,1)=matrix(row,1);matrix_ex(row+1,size_c+2)=matrix(row,size_c);end%上,下for

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论