📄 fouthorder.m
字号:
%求解四阶偏微分方程
%%%%%%%%%%%%%%%%%%
%准备工作:
%1.时间tao和空间h的划分
clear all
h=1.2;
tao=0.2;
h2=1.0/(h*h);
n=0;%记录循环次数
p=3;q=3;%矩阵的大小
%2.差分格式的乘积矩阵
A=[0 1 0;1 -4 1;0 1 0];
B=zeros(3);
C=[1 1 1;1 1 1;1 1 1];
%%%%%%%%%%%%%%%%%%%%%
% 读入图像
[filename,filepath]=uigetfile('*.jpg','请输入一个图像');
img=strcat(filepath,filename);
%图像灰度处理
color=imfinfo(img);
colortype=color.ColorType; %获取图象颜色类型
%类型判断和相应的读取图像
switch(colortype)
case 'truecolor'
im0=rgb2gray(imread(img));%转化为灰度图像
case 'indexed'
[im0,map]=imread(img);
im0=ind2gray(im,map); %转化为灰度图像
otherwise
im0=imread(img);
end
%%%%%%%%%%%%%%%%%%%%%%
% gaussian
% im0 = imnoise(im0,'gaussian');
figure(1),imshow(im0);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%开辟所需空间,把原图像数字矩阵扩充两行两列
%1.准备工作
% im0=rgb2gray(im0);
[m,n]=size(im0);%求取矩阵大小
im1=zeros(m+2,n+2);%开辟一个新的矩阵空间
im2=zeros(m+2,n+2);%开辟一个新的矩阵空间
im3=zeros(m+2,n+2);%开辟一个新的矩阵空间
mean0=zeros(m+2,n+2);%开辟一个新的矩阵空间
var0=zeros(m+2,n+2);%开辟一个新的矩阵空间
max0=zeros(m+2,n+2);%开辟一个新的矩阵空间
g0=zeros(m+2,n+2);%开辟一个新的矩阵空间
g1=zeros(m+2,n+2);%开辟一个新的矩阵空间
g2=zeros(m+2,n+2);%开辟一个新的矩阵空间
%2.实现
im1(2:m+1,2:n+1)=im0(:,:);%把原来的矩阵值赋给它
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
while 1
%求矩阵g1
%1.求im0的5五点差分格式,得到矩阵im1
for i=2:m+1
for j=2:n+1
%
B=im1(i-1:i+1,j-1:j+1);
im2(i,j)=h2*sum(sum(A.*B));
%计算均值
mean0(i,j)=sum(sum(B))/(p*q);%3*3
%计算方差
B1=B-mean0(i,j);
var0(i,j)=sum(sum(B1.^2))/(p*q);
end
end
%2.求g0=cu
max0=max(max(var0));
g0=1./(var0./max0.*abs(im2)/255+1);
%3.求g0的5五点差分格式,得到矩阵g1
for i=2:m+1
for j=2:n+1
B=g0(i-1:i+1,j-1:j+1);
g1(i,j)=h2*sum(sum(A.*B));
end
end
%4.求最后的差分格式
g2=tao*g1;
im3=im1-g2;%important
%满足条件就退出循环
n=n+1;
if n>10
break;
end
%更新原始矩阵
im1=im3;
end %while
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输出最后的矩阵图像
figure(2),imshow(mat2gray(im3(2:m,2:n)));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -