使用热方程使用Matlab模糊图像

时间:2014-04-22 13:57:17

标签: matlab image-processing pde heat

我正在尝试使用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)

是的,图像变白了

1 个答案:

答案 0 :(得分:2)

您的代码存在两个问题:

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

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

固定代码应该看起来像这样

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