28 #define min(a,b) (a<=b)?(a):(b)
29 #define max(a,b) (a>b)?(a):(b)
30 #define abs(a) (a<0)?-(a):(a)
54 int pos_o, pos_s, pos_m, ii, jj, kk, inc_o, inc_s, x, y;
60 inc_s = src_im.
w*src_im.
h;
61 inc_o = out_im->
w*out_im->
h;
66 for(ii=0; ii<ps; ii++)
68 for(jj=0; jj<ps; jj++)
70 pos_m = ii*boundary_mask.
w + jj;
73 pos_o = (ii+x)*out_im->
w + (jj+y) + kk*inc_o;
74 pos_s = (ii+patch_src.
x)*src_im.
w + (jj+patch_src.
y) + kk*inc_s;
76 out_im->
img[pos_o]*(boundary_mask.
img[pos_m]) +
77 src_im.
img[pos_s]*(1-(boundary_mask.
img[pos_m]));
101 float kernel[kernel_size];
102 int center = kernel_size - 1;
106 for(ii=0; ii<kernel_size; ii++)
108 kernel[ii] = expf(-(ii*ii)/(2*var));
112 int X1[2];
int Y1[2];
int X2[2];
int Y2[2];
113 if (temp.
x>0 && temp.
y>0)
115 X1[0] = 0; X1[1] = os; Y1[0] = 0; Y1[1] = ps;
116 X2[0] = os; X2[1] = ps; Y2[0] = 0; Y2[1] = os;
117 filter_mask(X1,Y1,X2,Y2,ps,boundary_mask,kernel,center);
119 else if (temp.
x==0 && temp.
y>0)
121 X1[0] = 0; X1[1] = os; Y1[0] = 0; Y1[1] = os;
122 X2[0] = os; X2[1] = ps; Y2[0] = 0; Y2[1] = os;
123 filter_mask(X1,Y1,X2,Y2,ps,boundary_mask,kernel,center);
125 else if (temp.
x>0 && temp.
y==0)
127 X1[0] = 0; X1[1] = os; Y1[0] = 0; Y1[1] = os;
128 X2[0] = 0; X2[1] = os; Y2[0] = os; Y2[1] = ps;
129 filter_mask(X1,Y1,X2,Y2,ps,boundary_mask,kernel,center);
159 Image *boundary_mask,
float kernel[],
int center)
161 int left, right, top, bottom, ii, jj, kk, ll, pos, pos_aux, pos_blend;
168 for(ii=0; ii<X1[1]; ii++)
170 for(jj=0; jj<Y1[1]; jj++)
172 left =
max(0, jj-center); right =
min(Y1[1]-1, jj+center);
173 top =
max(0, ii-center); bottom =
min(X1[1]-1, ii+center);
174 pos_aux = ii*aux_mask.
w + jj;
176 for(kk=top; kk<=bottom; kk++)
178 for(ll=left; ll<=right; ll++)
180 pos_blend = kk*boundary_mask->
w + ll;
181 aux_mask.
img[pos_aux] +=
182 boundary_mask->
img[pos_blend]*
183 kernel[
abs(ii-kk)]*kernel[
abs(jj-ll)];
184 tot_weight += kernel[
abs(ii-kk)]*kernel[
abs(jj-ll)];
187 aux_mask.
img[pos_aux] /= tot_weight;
191 for(ii=X2[0]; ii<X2[1]; ii++)
193 for(jj=Y2[0]; jj<Y2[1]; jj++)
195 left =
max(Y2[0], jj-center); right =
min(Y2[1]-1, jj+center);
196 top =
max(X2[0], ii-center); bottom =
min(X2[1]-1, ii+center);
197 pos_aux = ii*aux_mask.
w + jj;
199 for(kk=top; kk<=bottom; kk++)
201 for(ll=left; ll<=right; ll++)
203 pos_blend = kk*boundary_mask->
w + ll;
204 aux_mask.
img[pos_aux] +=
205 boundary_mask->
img[pos_blend]*
206 kernel[
abs(ii-kk)]*kernel[
abs(jj-ll)];
207 tot_weight += kernel[
abs(ii-kk)]*kernel[
abs(jj-ll)];
210 aux_mask.
img[pos_aux] /= tot_weight;
215 for(ii=0; ii<X1[1]; ii++)
217 for(jj=0; jj<Y1[1]; jj++)
219 pos = ii*aux_mask.
w + jj;
220 boundary_mask->
img[pos] = aux_mask.
img[pos];
223 for(ii=X2[0]; ii<X2[1]; ii++)
225 for(jj=Y2[0]; jj<Y2[1]; jj++)
227 pos = ii*aux_mask.
w + jj;
228 boundary_mask->
img[pos] = aux_mask.
img[pos];