source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/ffw/detbestlength2.m @ 37

Last change on this file since 37 was 37, checked in by (none), 14 years ago

Added original make3d

File size: 31.4 KB
Line 
1function [out]=detbestlength2(FFTrv,FFTiv,IFFTiv,size1,size2,isreal1,isreal2)
2% [out]=detbestlength2(FFTrv,FFTiv,IFFTiv,size1,size2,isreal1,isreal2)
3% Determine the best parameters for Overlap-Add FFT-based convolution.
4%
5% INPUT
6% FFTrv:   vector with costs of FFT for real 1d vectors
7% FFTiv:   vector with costs of FFT for complex 1d vectors
8% IFFTiv:  vector with costs of IFFT for complex 1d vectors
9% size1:   size(first_image)
10% size2:   size(second_image)
11% isreal1: 1 if first image is real, 0 otherwise (complex)
12% isreal2: 1 if second image is real, 0 otherwise (complex)
13% OUTPUT
14% out:    the optimized parameters:
15%         out.inverse:     if 1 the two input have to be inverted
16%         out.fftxfirst:   if one the image has to be fft first along
17%                          x-dimension
18%         out.ifftxfirst:  if one the product of spectra has to be ifft
19%                          first along x-dimensio
20%         out.nfftx:       the best length for fft transform along
21%                          x-dimension
22%         out.nffty:       the best length for fft transform along
23%                          y-dimension
24%         out.filterxfirst if 1 the filter has to be fft fisrt alng
25%                          x-dimension
26%
27
28out           = [];
29% the 3 input vectors have to be the same length
30L             = length(FFTrv);
31% a default value (just as Inf)
32infinitevalue = 99*10^99;
33%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
34%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
35%----------------------------------------------------- a image and b filter
36if isreal1 && isreal2
37    ax = size1(1);
38    ay = size1(2);
39    bx = size2(1);
40    by = size2(2);
41
42    val0 = infinitevalue;
43
44    for ii=1:L
45        for jj=1:L
46            if FFTrv(ii)~=0 && FFTrv(jj)~=0
47                Lx    = ii-bx+1;
48                Ly    = jj-by+1;
49                if Lx>0 && Ly>0
50                    nx    = ceil(ax/Lx);
51                    ny    = ceil(ay/Ly);
52
53                    cv1 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
54                    cv2 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
55                    cv3 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
56                    cv4 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
57
58                    cv5 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
59                    cv6 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
60                    cv7 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
61                    cv8 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
62
63                    if cv1<val0
64                        val0 = cv1;
65                        x    = ii;
66                        y    = jj;
67                        z    = 1;
68                        t    = 1;
69                    end
70                    if cv2<val0
71                        val0 = cv2;
72                        x    = ii;
73                        y    = jj;
74                        z    = 2;
75                        t    = 1;
76                    end
77                    if cv3<val0
78                        val0 = cv3;
79                        x    = ii;
80                        y    = jj;
81                        z    = 3;
82                        t    = 1;
83                    end
84                    if cv4<val0
85                        val0 = cv4;
86                        x    = ii;
87                        y    = jj;
88                        z    = 4;
89                        t    = 1;
90                    end
91                    if cv5<val0
92                        val0 = cv5;
93                        x    = ii;
94                        y    = jj;
95                        z    = 1;
96                        t    = 0;
97                    end
98                    if cv6<val0
99                        val0 = cv6;
100                        x    = ii;
101                        y    = jj;
102                        z    = 2;
103                        t    = 0;
104                    end
105                    if cv7<val0
106                        val0 = cv7;
107                        x    = ii;
108                        y    = jj;
109                        z    = 3;
110                        t    = 0;
111                    end
112                    if cv8<val0
113                        val0 = cv8;
114                        x    = ii;
115                        y    = jj;
116                        z    = 4;
117                        t    = 0;
118                    end
119                end
120            end
121        end
122    end
123    %----------------------------------------------------- a filter and b image
124    ax = size2(1);
125    ay = size2(2);
126    bx = size1(1);
127    by = size1(2);
128
129
130    val1 = infinitevalue;
131
132    for ii=1:L
133        for jj=1:L
134            if FFTrv(ii)~=0 && FFTrv(jj)~=0
135                Lx    = ii-bx+1;
136                Ly    = jj-by+1;
137                if Lx>0 && Ly>0
138                    nx    = ceil(ax/Lx);
139                    ny    = ceil(ay/Ly);
140
141                    cv1 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
142                    cv2 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
143                    cv3 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
144                    cv4 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
145
146                    cv5 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
147                    cv6 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
148                    cv7 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
149                    cv8 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
150
151                    if cv1<val1
152                        val1 = cv1;
153                        x    = ii;
154                        y    = jj;
155                        z    = 1;
156                        t    = 1;
157                    end
158                    if cv2<val1
159                        val1 = cv2;
160                        x    = ii;
161                        y    = jj;
162                        z    = 2;
163                        t    = 1;
164                    end
165                    if cv3<val1
166                        val1 = cv3;
167                        x    = ii;
168                        y    = jj;
169                        z    = 3;
170                        t    = 1;
171                    end
172                    if cv4<val1
173                        val1 = cv4;
174                        x    = ii;
175                        y    = jj;
176                        z    = 4;
177                        t    = 1;
178                    end
179                    if cv5<val1
180                        val1 = cv5;
181                        x    = ii;
182                        y    = jj;
183                        z    = 1;
184                        t    = 0;
185                    end
186                    if cv6<val1
187                        val1 = cv6;
188                        x    = ii;
189                        y    = jj;
190                        z    = 2;
191                        t    = 0;
192                    end
193                    if cv7<val1
194                        val1 = cv7;
195                        x    = ii;
196                        y    = jj;
197                        z    = 3;
198                        t    = 0;
199                    end
200                    if cv8<val1
201                        val1 = cv8;
202                        x    = ii;
203                        y    = jj;
204                        z    = 4;
205                        t    = 0;
206                    end
207                end
208            end
209        end
210    end
211    %--------------------------------------------------------------------------
212    if val1<val0
213        out.inverse = 1;
214        if z==1 || z==2
215            out.fftxfirst = 0;
216        else
217            out.fftxfirst = 1;
218        end
219        if z==1 || z==3
220            out.ifftxfirst = 1;
221        else
222            out.ifftxfirst = 0;
223        end
224    else
225        out.inverse = 0;
226        if z==1 || z==2
227            out.fftxfirst = 0;
228        else
229            out.fftxfirst = 1;
230        end
231        if z==1 || z==3
232            out.ifftxfirst = 1;
233        else
234            out.ifftxfirst = 0;
235        end
236    end
237    out.nfftx = x;
238    out.nffty = y;
239    if t==1
240        out.filterxfirst = 0;
241    else
242        out.filterxfirst = 1;
243    end
244    return;
245end
246%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
247%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
248%----------------------------------------------------- a image and b filter
249if ~isreal1 && ~isreal2
250    ax = size1(1);
251    ay = size1(2);
252    bx = size2(1);
253    by = size2(2);
254
255    val0 = infinitevalue;
256
257    for ii=1:L
258        for jj=1:L
259            if FFTrv(ii)~=0 && FFTrv(jj)~=0
260                Lx    = ii-bx+1;
261                Ly    = jj-by+1;
262                if Lx>0 && Ly>0
263                    nx    = ceil(ax/Lx);
264                    ny    = ceil(ay/Ly);
265
266                    cv1 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
267                    cv2 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
268                    cv3 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
269                    cv4 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
270
271                    cv5 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
272                    cv6 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
273                    cv7 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
274                    cv8 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
275
276                    if cv1<val0
277                        val0 = cv1;
278                        x    = ii;
279                        y    = jj;
280                        z    = 1;
281                        t    = 1;
282                    end
283                    if cv2<val0
284                        val0 = cv2;
285                        x    = ii;
286                        y    = jj;
287                        z    = 2;
288                        t    = 1;
289                    end
290                    if cv3<val0
291                        val0 = cv3;
292                        x    = ii;
293                        y    = jj;
294                        z    = 3;
295                        t    = 1;
296                    end
297                    if cv4<val0
298                        val0 = cv4;
299                        x    = ii;
300                        y    = jj;
301                        z    = 4;
302                        t    = 1;
303                    end
304                    if cv5<val0
305                        val0 = cv5;
306                        x    = ii;
307                        y    = jj;
308                        z    = 1;
309                        t    = 0;
310                    end
311                    if cv6<val0
312                        val0 = cv6;
313                        x    = ii;
314                        y    = jj;
315                        z    = 2;
316                        t    = 0;
317                    end
318                    if cv7<val0
319                        val0 = cv7;
320                        x    = ii;
321                        y    = jj;
322                        z    = 3;
323                        t    = 0;
324                    end
325                    if cv8<val0
326                        val0 = cv8;
327                        x    = ii;
328                        y    = jj;
329                        z    = 4;
330                        t    = 0;
331                    end
332                end
333            end
334        end
335    end
336    %----------------------------------------------------- a filter and b image
337    ax = size2(1);
338    ay = size2(2);
339    bx = size1(1);
340    by = size1(2);
341
342
343    val1 = infinitevalue;
344
345    for ii=1:L
346        for jj=1:L
347            if FFTiv(ii)~=0 && FFTiv(jj)~=0
348                Lx    = ii-bx+1;
349                Ly    = jj-by+1;
350                if Lx>0 && Ly>0
351                    nx    = ceil(ax/Lx);
352                    ny    = ceil(ay/Ly);
353
354                    cv1 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
355                    cv2 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
356                    cv3 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
357                    cv4 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
358
359                    cv5 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
360                    cv6 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
361                    cv7 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
362                    cv8 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
363
364                    if cv1<val1
365                        val1 = cv1;
366                        x    = ii;
367                        y    = jj;
368                        z    = 1;
369                        t    = 1;
370                    end
371                    if cv2<val1
372                        val1 = cv2;
373                        x    = ii;
374                        y    = jj;
375                        z    = 2;
376                        t    = 1;
377                    end
378                    if cv3<val1
379                        val1 = cv3;
380                        x    = ii;
381                        y    = jj;
382                        z    = 3;
383                        t    = 1;
384                    end
385                    if cv4<val1
386                        val1 = cv4;
387                        x    = ii;
388                        y    = jj;
389                        z    = 4;
390                        t    = 1;
391                    end
392                    if cv5<val1
393                        val1 = cv5;
394                        x    = ii;
395                        y    = jj;
396                        z    = 1;
397                        t    = 0;
398                    end
399                    if cv6<val1
400                        val1 = cv6;
401                        x    = ii;
402                        y    = jj;
403                        z    = 2;
404                        t    = 0;
405                    end
406                    if cv7<val1
407                        val1 = cv7;
408                        x    = ii;
409                        y    = jj;
410                        z    = 3;
411                        t    = 0;
412                    end
413                    if cv8<val1
414                        val1 = cv8;
415                        x    = ii;
416                        y    = jj;
417                        z    = 4;
418                        t    = 0;
419                    end
420                end
421            end
422        end
423    end
424    %--------------------------------------------------------------------------
425    if val1<val0
426        out.inverse = 1;
427        if z==1 || z==2
428            out.fftxfirst = 0;
429        else
430            out.fftxfirst = 1;
431        end
432        if z==1 || z==3
433            out.ifftxfirst = 1;
434        else
435            out.ifftxfirst = 0;
436        end
437    else
438        out.inverse = 0;
439        if z==1 || z==2
440            out.fftxfirst = 0;
441        else
442            out.fftxfirst = 1;
443        end
444        if z==1 || z==3
445            out.ifftxfirst = 1;
446        else
447            out.ifftxfirst = 0;
448        end
449    end
450    out.nfftx = x;
451    out.nffty = y;
452    if t==1
453        out.filterxfirst = 0;
454    else
455        out.filterxfirst = 1;
456    end
457    return;
458end
459%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
460%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
461%----------------------------------------------------- a image and b filter
462if isreal1 && ~isreal2
463    ax = size1(1);
464    ay = size1(2);
465    bx = size2(1);
466    by = size2(2);
467
468    val0 = infinitevalue;
469
470    for ii=1:L
471        for jj=1:L
472            if FFTrv(ii)~=0 && FFTrv(jj)~=0
473                Lx    = ii-bx+1;
474                Ly    = jj-by+1;
475                if Lx>0 && Ly>0
476                    nx    = ceil(ax/Lx);
477                    ny    = ceil(ay/Ly);
478
479                    cv1 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
480                    cv2 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
481                    cv3 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
482                    cv4 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
483
484                    cv5 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
485                    cv6 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
486                    cv7 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
487                    cv8 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
488
489                    if cv1<val0
490                        val0 = cv1;
491                        x    = ii;
492                        y    = jj;
493                        z    = 1;
494                        t    = 1;
495                    end
496                    if cv2<val0
497                        val0 = cv2;
498                        x    = ii;
499                        y    = jj;
500                        z    = 2;
501                        t    = 1;
502                    end
503                    if cv3<val0
504                        val0 = cv3;
505                        x    = ii;
506                        y    = jj;
507                        z    = 3;
508                        t    = 1;
509                    end
510                    if cv4<val0
511                        val0 = cv4;
512                        x    = ii;
513                        y    = jj;
514                        z    = 4;
515                        t    = 1;
516                    end
517                    if cv5<val0
518                        val0 = cv5;
519                        x    = ii;
520                        y    = jj;
521                        z    = 1;
522                        t    = 0;
523                    end
524                    if cv6<val0
525                        val0 = cv6;
526                        x    = ii;
527                        y    = jj;
528                        z    = 2;
529                        t    = 0;
530                    end
531                    if cv7<val0
532                        val0 = cv7;
533                        x    = ii;
534                        y    = jj;
535                        z    = 3;
536                        t    = 0;
537                    end
538                    if cv8<val0
539                        val0 = cv8;
540                        x    = ii;
541                        y    = jj;
542                        z    = 4;
543                        t    = 0;
544                    end
545                end
546            end
547        end
548    end
549    %----------------------------------------------------- a filter and b image
550    ax = size2(1);
551    ay = size2(2);
552    bx = size1(1);
553    by = size1(2);
554
555
556    val1 = infinitevalue;
557
558    for ii=1:L
559        for jj=1:L
560            if FFTrv(ii)~=0 && FFTrv(jj)~=0
561                Lx    = ii-bx+1;
562                Ly    = jj-by+1;
563                if Lx>0 && Ly>0
564                    nx    = ceil(ax/Lx);
565                    ny    = ceil(ay/Ly);
566
567                    cv1 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
568                    cv2 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
569                    cv3 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
570                    cv4 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
571
572                    cv5 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
573                    cv6 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
574                    cv7 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
575                    cv8 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
576
577                    if cv1<val1
578                        val1 = cv1;
579                        x    = ii;
580                        y    = jj;
581                        z    = 1;
582                        t    = 1;
583                    end
584                    if cv2<val1
585                        val1 = cv2;
586                        x    = ii;
587                        y    = jj;
588                        z    = 2;
589                        t    = 1;
590                    end
591                    if cv3<val1
592                        val1 = cv3;
593                        x    = ii;
594                        y    = jj;
595                        z    = 3;
596                        t    = 1;
597                    end
598                    if cv4<val1
599                        val1 = cv4;
600                        x    = ii;
601                        y    = jj;
602                        z    = 4;
603                        t    = 1;
604                    end
605                    if cv5<val1
606                        val1 = cv5;
607                        x    = ii;
608                        y    = jj;
609                        z    = 1;
610                        t    = 0;
611                    end
612                    if cv6<val1
613                        val1 = cv6;
614                        x    = ii;
615                        y    = jj;
616                        z    = 2;
617                        t    = 0;
618                    end
619                    if cv7<val1
620                        val1 = cv7;
621                        x    = ii;
622                        y    = jj;
623                        z    = 3;
624                        t    = 0;
625                    end
626                    if cv8<val1
627                        val1 = cv8;
628                        x    = ii;
629                        y    = jj;
630                        z    = 4;
631                        t    = 0;
632                    end
633                end
634            end
635        end
636    end
637    %--------------------------------------------------------------------------
638    if val1<val0
639        out.inverse = 1;
640        if z==1 || z==2
641            out.fftxfirst = 0;
642        else
643            out.fftxfirst = 1;
644        end
645        if z==1 || z==3
646            out.ifftxfirst = 1;
647        else
648            out.ifftxfirst = 0;
649        end
650    else
651        out.inverse = 0;
652        if z==1 || z==2
653            out.fftxfirst = 0;
654        else
655            out.fftxfirst = 1;
656        end
657        if z==1 || z==3
658            out.ifftxfirst = 1;
659        else
660            out.ifftxfirst = 0;
661        end
662    end
663    out.nfftx = x;
664    out.nffty = y;
665    if t==1
666        out.filterxfirst = 0;
667    else
668        out.filterxfirst = 1;
669    end
670    return;
671end
672%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
673%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
674%----------------------------------------------------- a image and b filter
675if ~isreal1 && isreal2
676    ax = size1(1);
677    ay = size1(2);
678    bx = size2(1);
679    by = size2(2);
680
681    val0 = infinitevalue;
682
683    for ii=1:L
684        for jj=1:L
685            if FFTrv(ii)~=0 && FFTrv(jj)~=0
686                Lx    = ii-bx+1;
687                Ly    = jj-by+1;
688                if Lx>0 && Ly>0
689                    nx    = ceil(ax/Lx);
690                    ny    = ceil(ay/Ly);
691
692                    cv1 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
693                    cv2 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
694                    cv3 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
695                    cv4 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTrv(jj) + jj*FFTiv(ii));
696
697                    cv5 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
698                    cv6 = nx*ny*(ii*FFTiv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
699                    cv7 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
700                    cv8 = nx*ny*(jj*FFTiv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTrv(ii) + ii*FFTiv(jj));
701
702                    if cv1<val0
703                        val0 = cv1;
704                        x    = ii;
705                        y    = jj;
706                        z    = 1;
707                        t    = 1;
708                    end
709                    if cv2<val0
710                        val0 = cv2;
711                        x    = ii;
712                        y    = jj;
713                        z    = 2;
714                        t    = 1;
715                    end
716                    if cv3<val0
717                        val0 = cv3;
718                        x    = ii;
719                        y    = jj;
720                        z    = 3;
721                        t    = 1;
722                    end
723                    if cv4<val0
724                        val0 = cv4;
725                        x    = ii;
726                        y    = jj;
727                        z    = 4;
728                        t    = 1;
729                    end
730                    if cv5<val0
731                        val0 = cv5;
732                        x    = ii;
733                        y    = jj;
734                        z    = 1;
735                        t    = 0;
736                    end
737                    if cv6<val0
738                        val0 = cv6;
739                        x    = ii;
740                        y    = jj;
741                        z    = 2;
742                        t    = 0;
743                    end
744                    if cv7<val0
745                        val0 = cv7;
746                        x    = ii;
747                        y    = jj;
748                        z    = 3;
749                        t    = 0;
750                    end
751                    if cv8<val0
752                        val0 = cv8;
753                        x    = ii;
754                        y    = jj;
755                        z    = 4;
756                        t    = 0;
757                    end
758                end
759            end
760        end
761    end
762    %----------------------------------------------------- a filter and b image
763    ax = size2(1);
764    ay = size2(2);
765    bx = size1(1);
766    by = size1(2);
767
768
769    val1 = infinitevalue;
770
771    for ii=1:L
772        for jj=1:L
773            if FFTrv(ii)~=0 && FFTrv(jj)~=0
774                Lx    = ii-bx+1;
775                Ly    = jj-by+1;
776                if Lx>0 && Ly>0
777                    nx    = ceil(ax/Lx);
778                    ny    = ceil(ay/Ly);
779
780                    cv1 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
781                    cv2 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
782                    cv3 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
783                    cv4 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (ii*FFTiv(jj) + jj*FFTiv(ii));
784
785                    cv5 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
786                    cv6 = nx*ny*(ii*FFTrv(jj) + jj*FFTiv(ii) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
787                    cv7 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + jj*IFFTiv(ii) + ii*IFFTiv(jj)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
788                    cv8 = nx*ny*(jj*FFTrv(ii) + ii*FFTiv(jj) + ii*IFFTiv(jj) + jj*IFFTiv(ii)) + (jj*FFTiv(ii) + ii*FFTiv(jj));
789
790                    if cv1<val1
791                        val1 = cv1;
792                        x    = ii;
793                        y    = jj;
794                        z    = 1;
795                        t    = 1;
796                    end
797                    if cv2<val1
798                        val1 = cv2;
799                        x    = ii;
800                        y    = jj;
801                        z    = 2;
802                        t    = 1;
803                    end
804                    if cv3<val1
805                        val1 = cv3;
806                        x    = ii;
807                        y    = jj;
808                        z    = 3;
809                        t    = 1;
810                    end
811                    if cv4<val1
812                        val1 = cv4;
813                        x    = ii;
814                        y    = jj;
815                        z    = 4;
816                        t    = 1;
817                    end
818                    if cv5<val1
819                        val1 = cv5;
820                        x    = ii;
821                        y    = jj;
822                        z    = 1;
823                        t    = 0;
824                    end
825                    if cv6<val1
826                        val1 = cv6;
827                        x    = ii;
828                        y    = jj;
829                        z    = 2;
830                        t    = 0;
831                    end
832                    if cv7<val1
833                        val1 = cv7;
834                        x    = ii;
835                        y    = jj;
836                        z    = 3;
837                        t    = 0;
838                    end
839                    if cv8<val1
840                        val1 = cv8;
841                        x    = ii;
842                        y    = jj;
843                        z    = 4;
844                        t    = 0;
845                    end
846                end
847            end
848        end
849    end
850    %--------------------------------------------------------------------------
851    if val1<val0
852        out.inverse = 1;
853        if z==1 || z==2
854            out.fftxfirst = 0;
855        else
856            out.fftxfirst = 1;
857        end
858        if z==1 || z==3
859            out.ifftxfirst = 1;
860        else
861            out.ifftxfirst = 0;
862        end
863    else
864        out.inverse = 0;
865        if z==1 || z==2
866            out.fftxfirst = 0;
867        else
868            out.fftxfirst = 1;
869        end
870        if z==1 || z==3
871            out.ifftxfirst = 1;
872        else
873            out.ifftxfirst = 0;
874        end
875    end
876    out.nfftx = x;
877    out.nffty = y;
878    if t==1
879        out.filterxfirst = 0;
880    else
881        out.filterxfirst = 1;
882    end
883    return;
884end
885%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
886%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Note: See TracBrowser for help on using the repository browser.