图像的泊松(Poisson)编辑、泊松融合

——泊松方程的理论推导

 
这里写图片描述
这里写图片描述
这里写图片描述

——从物理模型跨入图像模型以及算法详解

这里写图片描述
这里写图片描述
这里写图片描述

 

本部分我们将讨论算法的离散化数值实现,并给出相应的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));

 

 

posted @ 2016-03-16 17:58  何人之名  阅读(4808)  评论(0编辑  收藏  举报