/normxcorr/trunk

To get this branch, use:
bzr branch http://suren.me/webbzr/normxcorr/trunk

« back to all changes in this revision

Viewing changes to automate_image.m

  • Committer: Suren A. Chilingaryan
  • Date: 2009-12-02 05:08:22 UTC
  • Revision ID: csa@dside.dyndns.org-20091202050822-n6ouznm1zp2n2i5l
Instead of transfer compute local sums and denormals on board

Show diffs side-by-side

added added

removed removed

Lines of Context:
49
49
OPTIMIZE = 3;
50
50
CORRSIZE = 15;  
51
51
PRECISION = 1000;
52
 
SILENT = 0;
 
52
SILENT = 1;
53
53
 
54
54
 
55
55
% exist('grid_x')
157
157
 
158
158
if OPTIMIZE > 2
159
159
    hwid = normxcorr_hw();
 
160
 
160
161
    if hwid > 0
161
162
        err = normxcorr_hw(hwid, 1, ncp, CORRSIZE);
162
163
        if (err ~= 0)
174
175
    hwid = 0;
175
176
end
176
177
 
 
178
 
177
179
if OPTIMIZE > 0
 
180
 
 
181
%  if OPTIMIZE > 2
 
182
%    crop_dim = [min(base_points_x(:)) - 2*CORRSIZE, min(base_points_y(:)) - 2 * CORRSIZE, max(base_points_x(:)) + 2*CORRSIZE, max(base_points_y(:)) + 2 * CORRSIZE]
 
183
%    crop_size = (crop_dim(3) - crop_dim(1)) * (crop_dim(4) - crop_dim(2))
 
184
%    mesh_size = ncp * 4 * CORRSIZE * CORRSIZE
 
185
%  end
 
186
 
178
187
  for icp = 1:ncp
179
188
    if isequal(rects_base(icp,3:4),[0 0])
180
189
        %near edge
189
198
        data_base(icp).skip = 1;
190
199
        continue
191
200
    end
192
 
    
193
 
    double_sub_base = double(sub_base);
194
 
 
195
 
    if (numel(sub_base) < 2) ||  (std(double_sub_base(:)) == 0)
196
 
        % This check is moved here for normxcorr2
197
 
        eid = sprintf('Images:%s:sameElementsInTemplate',mfilename);
198
 
        msg = 'The values of TEMPLATE cannot all be the same.';
199
 
        error(eid,'%s',msg);
200
 
    end
201
 
 
202
 
    local_sum_A = dic_local_sum(double_sub_base,n,n);
203
 
    local_sum_A2 = dic_local_sum(double_sub_base.*double_sub_base,n,n);
204
 
 
205
 
    % Note: diff_local_sums should be nonnegative, but may have negative
206
 
    % values due to round off errors. Below, we use max to ensure the
207
 
    % radicand is nonnegative.
208
 
    denom_A = sqrt( max(( local_sum_A2 - (local_sum_A.^2)/mn ) / (mn-1), 0) );
209
 
    i_nonzero = find(denom_A~=0);
210
201
 
211
202
    data_base(icp).skip = 0;
212
203
 
213
204
    if (OPTIMIZE > 2)
 
205
 
 
206
        if sum(sub_base(:)) == sub_base(1)*numel(sub_base)
 
207
            eid = sprintf('Images:%s:sameElementsInTemplate',mfilename);
 
208
            msg = 'The values of TEMPLATE cannot all be the same.';
 
209
            error(eid,'%s',msg);
 
210
        end
 
211
        normxcorr_hw(hwid, 10, icp, sub_base);
 
212
%{
 
213
        double_sub_base = double(sub_base);
 
214
        local_sum_A = dic_local_sum(double_sub_base,n,n);
 
215
        local_sum_A2 = dic_local_sum(double_sub_base.*double_sub_base,n,n);
 
216
        denom_A = sqrt( max(( local_sum_A2 - (local_sum_A.^2)/mn ) / (mn-1), 0) );
 
217
        i_nonzero = find(denom_A~=0);
214
218
        normxcorr_hw(hwid, 10, icp, sub_base, single(local_sum_A), single(denom_A), uint16(i_nonzero));
 
219
%}
215
220
    else
 
221
        double_sub_base = double(sub_base);
 
222
 
 
223
        if (numel(sub_base) < 2) ||  (std(double_sub_base(:)) == 0)
 
224
            % This check is moved here for normxcorr2
 
225
            eid = sprintf('Images:%s:sameElementsInTemplate',mfilename);
 
226
            msg = 'The values of TEMPLATE cannot all be the same.';
 
227
            error(eid,'%s',msg);
 
228
        end
 
229
 
 
230
        local_sum_A = dic_local_sum(double_sub_base,n,n);
 
231
        local_sum_A2 = dic_local_sum(double_sub_base.*double_sub_base,n,n);
 
232
 
 
233
        % Note: diff_local_sums should be nonnegative, but may have negative
 
234
        % values due to round off errors. Below, we use max to ensure the
 
235
        % radicand is nonnegative.
 
236
        denom_A = sqrt( max(( local_sum_A2 - (local_sum_A.^2)/mn ) / (mn-1), 0) );
 
237
        i_nonzero = find(denom_A~=0);
 
238
    
216
239
        data_base(icp).denom_A = denom_A;
217
240
        data_base(icp).i_nonzero = i_nonzero;
218
241