一天的成果

主线程函数有:

load('INRIA/inriaperson_final');
addpath star-cascade
im1 = imread('test3.png');
im2 = imread('test2.png');

thresh = -0.5;
pca = 5;
% orig_model = model;
csc_model = cascade_model(model, '2007', pca, thresh);

pyra1 = featpyramid(double(im1), csc_model);
pyra2 = featpyramid(double(im2), csc_model);


[dCSC1, bCSC1] = cascade_detect(pyra1, csc_model, csc_model.thresh);
[dCSC2, bCSC2] = cascade_detect(pyra2, csc_model, csc_model.thresh);
boxes1 = getboxes(csc_model, im1, dCSC1, bCSC1);
boxes2 = getboxes(csc_model, im2, dCSC1, bCSC1);

featureim1 = cell(1,8);
featureim2 = cell(1,8);
numfilters = 10;
n = 1;
for i = numfilters:-1:1
%     n = 1;
    x1 = boxes1(:,1+(i-1)*4);
    y1 = boxes1(:,2+(i-1)*4);
    x2 = boxes1(:,3+(i-1)*4);
    y2 = boxes1(:,4+(i-1)*4);
    % remove unused filters
    del = find(((x1 == 0) .* (x2 == 0) .* (y1 == 0) .* (y2 == 0)) == 1);
    x1(del) = [];
    x2(del) = [];
    y1(del) = [];
    y2(del) = [];
    if i == 2
        continue;
    end
    if i == 1
        continue;
    end
    temp = imcrop(im1,[x1 y1 x2-x1 y2-y1]); 
    temp = rgb2gray(temp);
    TextFeature=statxture(temp);
%     featureim1 = cell(8)
    featureim1{1,n} = TextFeature;
    n = n+1;
end

n = 1;
for i = numfilters:-1:1
%     n = 1;
    x1 = boxes2(:,1+(i-1)*4);
    y1 = boxes2(:,2+(i-1)*4);
    x2 = boxes2(:,3+(i-1)*4);
    y2 = boxes2(:,4+(i-1)*4);
    % remove unused filters
    del = find(((x1 == 0) .* (x2 == 0) .* (y1 == 0) .* (y2 == 0)) == 1);
    x1(del) = [];
    x2(del) = [];
    y1(del) = [];
    y2(del) = [];
    if i == 2
        continue;
    end
    if i == 1
        continue;
    end
    temp = imcrop(im2,[x1 y1 x2-x1 y2-y1]); 
    temp = rgb2gray(temp);
    TextFeature=statxture(temp);
%     featureim2 = cell(8);
    featureim2{1,n} = TextFeature;
    n = n+1;
end

for k = 1:1:8
    feature1 = featureim1{1,k};
    feature2 = featureim2{1,k};
    distance = (feature1-feature2)*(feature1-feature2)';
    DisResult(k) = distance;
end
figure;
showboxes2(im2, boxes2);
figure;
showboxes2(im1, boxes1);
k = 1;
for i = numfilters:-1:1
%     n = 1;
    x1 = boxes2(:,1+(i-1)*4);
    y1 = boxes2(:,2+(i-1)*4);
    x2 = boxes2(:,3+(i-1)*4);
    y2 = boxes2(:,4+(i-1)*4);
%     % remove unused filters
%     del = find(((x1 == 0) .* (x2 == 0) .* (y1 == 0) .* (y2 == 0)) == 1);
%     x1(del) = [];
%     x2(del) = [];
%     y1(del) = [];
%     y2(del) = [];
    if i == 2
        continue;
    end
    if i == 1
        continue;
    end
    string = int2str(DisResult(k));
    k = k+1;
    x = round(x1+(x2-x1)/2);
    y = round(y1+(y2-y1)/2);
%     text(x,y,string);
    text('Position',[x,y],'string',string,'color','r')
end

用到的函数有:

function b = getboxes(model, image, det, all)
b = [];
if ~isempty(det)
  try
    % attempt to use bounding box prediction, if available
    bboxpred = model.bboxpred;
    [det all] = clipboxes(image, det, all);
    [det all] = bboxpred_get(bboxpred, det, all);
  catch
    warning('no bounding box predictor found');
  end
  [det all] = clipboxes(image, det, all);
  I = nms(det, 0.5);
  det = det(I,:);
  all = all(I,:);
  b = [det(:,1:4) all];
end
end
还有:

function showboxes2(im, boxes, out)

% showboxes(im, boxes, out)
% Draw bounding boxes on top of image.
% If out is given, a pdf of the image is generated (requires export_fig).

if nargin > 2
  % different settings for producing pdfs
  print = true;
  wwidth = 2.25;
  cwidth = 1.25;
  imsz = size(im);
  % resize so that the image is 300 pixels per inch
  % and 1.2 inches tall
  scale = 1.2 / (imsz(1)/300);
  im = imresize(im, scale, 'method', 'cubic');
  %f = fspecial('gaussian', [3 3], 0.5);
  %im = imfilter(im, f);
  boxes = (boxes-1)*scale+1;
else
  print = false;
  cwidth = 2;
end

% image(im); 
imshow(im);
if print
  truesize(gcf);
end
axis image;
axis off;
set(gcf, 'Color', 'white');

if ~isempty(boxes)
  numfilters = floor(size(boxes, 2)/4);
  if print
    % if printing, increase the contrast around the boxes
    % by printing a white box under each color box
    for i = 1:numfilters
      x1 = boxes(:,1+(i-1)*4);
      y1 = boxes(:,2+(i-1)*4);
      x2 = boxes(:,3+(i-1)*4);
      y2 = boxes(:,4+(i-1)*4);
      % remove unused filters
      del = find(((x1 == 0) .* (x2 == 0) .* (y1 == 0) .* (y2 == 0)) == 1);
      x1(del) = [];
      x2(del) = [];
      y1(del) = [];
      y2(del) = [];
      if i == 1
        w = wwidth;
      else
        w = wwidth;
      end
      line([x1 x1 x2 x2 x1]', [y1 y2 y2 y1 y1]', 'color', 'w', 'linewidth', w);
    end
  end
  % draw the boxes with the detection window on top (reverse order)
  for i = numfilters:-1:1
    x1 = boxes(:,1+(i-1)*4);
    y1 = boxes(:,2+(i-1)*4);
    x2 = boxes(:,3+(i-1)*4);
    y2 = boxes(:,4+(i-1)*4);
    % remove unused filters
    del = find(((x1 == 0) .* (x2 == 0) .* (y1 == 0) .* (y2 == 0)) == 1);
    x1(del) = [];
    x2(del) = [];
    y1(del) = [];
    y2(del) = [];
    if i == 2
        continue;
    end
    if i == 1
      c = [160/255 0 0];
      s = '-';
    else
      c = 'b';
      s = '-';
    end
    line([x1 x1 x2 x2 x1]', [y1 y2 y2 y1 y1]', 'color', c, 'linewidth', cwidth, 'linestyle', s);
  end
end

% save to pdf
if print
  % requires export_fig from http://www.mathworks.com/matlabcentral/fileexchange/23629-exportfig
  export_fig([out]);
end
end

还有就是上一篇的纹理特征了。

你可能感兴趣的:(String,function,image,IM,printing,distance)