——泊松方程的理论推导
——从物理模型跨入图像模型以及算法详解
本部分我们将讨论算法的离散化数值实现,并给出相应的MATLAB代码,实现结果如图下图(左图)所示,可见图像融合的效果还是非常理想。
1 %泊松图像融合 2 3 4 landscape = double(imread('D:\\tmppic\\2.jpg')); 5 man = double(imread('D:\\tmppic\\3.jpg')); 6 sizeLand = size(landscape); 7 sizeMan = size(man); 8 9 gradient_inner = man(1:sizeMan(1)-2,2:sizeMan(2)-1,:)... 10 + man(3:sizeMan(1),2:sizeMan(2)-1,:)... 11 + man(2:sizeMan(1)-1,1:sizeMan(2)-2,:)... 12 + man(2:sizeMan(1)-1,3:sizeMan(2),:)... 13 - 4*man(2:sizeMan(1)-1,2:sizeMan(2)-1,:); 14 15 des_x = sizeLand(1)/4; 16 des_y = sizeLand(2)/4; 17 18 temp = mkTemp(sizeMan(1),sizeMan(2)); 19 20 21 rebuilt = landscape(des_y:des_y+sizeMan(1)-1,des_x:des_x+sizeMan(2)-1,:); 22 origin = rebuilt; 23 rebuilt = temp.*rebuilt + (1-temp).*origin; 24 25 Lap2 = [0,1,0;1,0,1;0,1,0]; 26 27 28 %这是分成四次运算,担心内存问题 29 % for n = [1:1000] 30 % rebuilt(2:2:sizeMan(1)-1,2:2:sizeMan(2)-1,:)= ... 31 % (rebuilt(1:2:sizeMan(1)-2 , 2:2:sizeMan(2)-1,:)... 32 % +rebuilt(3:2:sizeMan(1) , 2:2:sizeMan(2)-1,:)... 33 % +rebuilt(2:2:sizeMan(1)-1 , 1:2:sizeMan(2)-2,:)... 34 % +rebuilt(2:2:sizeMan(1)-1 , 3:2:sizeMan(2),:)... 35 % -gradient_inner(1:2:sizeMan(1)-2 , 1:2:sizeMan(2)-2,:))/4; 36 % rebuilt(3:2:sizeMan(1)-1,3:2:sizeMan(2)-1,:)= ... 37 % (rebuilt(2:2:sizeMan(1)-2 , 3:2:sizeMan(2)-1,:)... 38 % +rebuilt(4:2:sizeMan(1) , 3:2:sizeMan(2)-1,:)... 39 % +rebuilt(3:2:sizeMan(1)-1 , 2:2:sizeMan(2)-2,:)... 40 % +rebuilt(3:2:sizeMan(1)-1 , 4:2:sizeMan(2),:)... 41 % -gradient_inner(2:2:sizeMan(1)-2 , 2:2:sizeMan(2)-2,:))/4; 42 % rebuilt(3:2:sizeMan(1)-1,2:2:sizeMan(2)-1,:)= ... 43 % (rebuilt(2:2:sizeMan(1)-2 , 2:2:sizeMan(2)-1,:)... 44 % +rebuilt(4:2:sizeMan(1) , 2:2:sizeMan(2)-1,:)... 45 % +rebuilt(3:2:sizeMan(1)-1 , 1:2:sizeMan(2)-2,:)... 46 % +rebuilt(3:2:sizeMan(1)-1 , 3:2:sizeMan(2),:)... 47 % -gradient_inner(2:2:sizeMan(1)-2 , 1:2:sizeMan(2)-2,:))/4; 48 % rebuilt(2:2:sizeMan(1)-1 , 3:2:sizeMan(2)-1,:)= ... 49 % (rebuilt(1:2:sizeMan(1)-2 , 3:2:sizeMan(2)-1,:)... 50 % +rebuilt(3:2:sizeMan(1) , 3:2:sizeMan(2)-1,:)... 51 % +rebuilt(2:2:sizeMan(1)-1 , 2:2:sizeMan(2)-2,:)... 52 % +rebuilt(2:2:sizeMan(1)-1 , 4:2:sizeMan(2),:)... 53 % -gradient_inner(1:2:sizeMan(1)-2 , 2:2:sizeMan(2)-2,:))/4; 54 % end 55 56 %一种写法,不考虑内存 57 for n = [1:10000] 58 rebuilt(2:sizeMan(1)-1,2:sizeMan(2)-1,:)= ... 59 (rebuilt(1:sizeMan(1)-2 , 2:sizeMan(2)-1,:)... 60 +rebuilt(3:sizeMan(1) , 2:sizeMan(2)-1,:)... 61 +rebuilt(2:sizeMan(1)-1 , 1:sizeMan(2)-2,:)... 62 +rebuilt(2:sizeMan(1)-1 , 3:sizeMan(2),:)... 63 -gradient_inner(1:sizeMan(1)-2 , 1:sizeMan(2)-2,:))/4; 64 end 65 66 landscape(des_y:des_y+sizeMan(1)-1,des_x:des_x+sizeMan(2)-1,:) = rebuilt; 67 figure;imshow(uint8(landscape));