1

我正在尝试使用 PDE 热方程并将其应用于使用 Matlab 的图像。我遇到的问题是图像没有模糊,它只是变白了。此外,我从使用 Maple 的其他班级中得到了不同的结果。

这是代码:

% George Lees Jr. 
% Heat equation

clear,clc;
dx = 1;
dy = 1;
dt = .025;
%dt/(dx*dx)

t = 0;
time = 3;
T_old = imread('tulipgray.jpg');
T_temp=T_old;
[m,n,k] = size(T_temp);
%colormap gray;
%imagesc(T_temp);
%imshow(T_old);
T_new = T_temp;
T_new=ind2gray(T_new,colormap);
%T_new(:,50)=0;
%T_old(1,70)
%imagesc(T_new);
%diff_x = dt/(dx*dx)
%diff_y = dt/ (dy*dy)
%time = 0;
while t < time
    for i = 2:1:m-1
        for j = 2:1:n-1
                T_new(i,j) = T_temp(i,j) + dt*(T_temp(i+1,j) -2*T_temp(i,j) + T_temp(i-1,j)) + dt*(T_temp(i,j+1)-2*T_temp(i,j) + T_temp(i,j-1));

        t = t+dt;
        T_temp(i,j) = T_new(i,j);


        end
    end
end

figure
imshow(T_new)

是的,图像变得更白了

4

1 回答 1

2

您的代码有两个问题:

1)您在每个像素之后而不是在完成整个图像之后增加时间计数器

2)您需要对浮点值进行计算,而不是整数。dt 很小,因此等式 RHS 的值 <1

固定代码应该是这样的

clear,clc;

dt = 0.025;
time = 3;
T_old = imread('rice.png');
T_temp=double(T_old);
[m,n,k] = size(T_temp);

T_new = double(T_temp);
T_new=ind2gray(T_new,colormap);

while t < time
    for i = 2:1:m-1
        for j = 2:1:n-1
            T_new(i,j) = T_temp(i,j) + dt*(T_temp(i+1,j) -2*T_temp(i,j) + T_temp(i-1,j)) + dt*(T_temp(i,j+1)-2*T_temp(i,j) + T_temp(i,j-1));
        end
    end
   T_temp = T_new;
   t = t+dt;
   imshow(uint8(T_new))
   getframe;
end
于 2014-04-23T02:59:44.663 回答