[wadalabfont-kit] / jis2prim / Matchers.cc  

View of /jis2prim/Matchers.cc

Parent Directory | Revision Log
Revision: 1.1 - (download) (as text) (annotate)
Tue Aug 20 11:10:36 2002 UTC (21 years, 8 months ago) by ktanaka
Branch: MAIN
CVS Tags: SNAP-20040518, SNAP-20030702, SNAP-20030630, SNAP-20030624, HEAD
*** empty log message ***
#include "BitmapFont.h"
#include "Matchers.h"
#include <vector>

std::vector<pixel> MatchResult::getPixels() const {
  return pm.getPixels(x,y);
}

Matchers::Matchers(){
  pm.push_back(PatMatch(3,3,
			"..."
			".@@"
			"...",
			Assumption()
			.add(SimpleAssumption(YokoMask,Start,1,1,0,0))
			.add(SimpleAssumption(HidariMask,End,1,1,180,0))));
  pm.push_back(PatMatch(3,3,
			"..."
			"@@@"
			"...",
			Assumption()
			.add(SimpleAssumption(YokoMask,Mid,1,1,0,0))
			.add(SimpleAssumption(HidariMask,Mid,1,1,180,1))));
  pm.push_back(PatMatch(4,3,
			"...?"
			"@@@@"
			".@@.",
			Assumption()
			.add(SimpleAssumption(YokoMask,Mid,1.5,1,0,0))
			.add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointStart,1.5,1,270,2))));
  pm.push_back(PatMatch(5,3,
			".@@.."
			"@@@@@"
			".....",
			Assumption()
			.add(SimpleAssumption(YokoMask,Mid,1.5,1,0,0))
			.add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointEnd,1.5,1,270,2))));
  pm.push_back(PatMatch(5,4,
			"....?"
			".@@.."
			"@@@@."
			"?...?",
			SimpleAssumption(YokoMask,End,3,2,0,2)));
  pm.push_back(PatMatch(4,2,
			".@@."
			".@@.",
			SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointStart,1.5,1,270,2)));
  pm.push_back(PatMatch(5,2,
			"..@@."
			".@@..",
			SimpleAssumption((PtypeMask)(TatehidariMask|HidariMask),JointStart,2,0.5,225,1.7)));
  pm.push_back(PatMatch(4,2,
			"?*@*"
			"*@*?",
			SimpleAssumption((PtypeMask)(TatehidariMask|HidariMask),JointStart,1.5,0.5,225,1)));
  pm.push_back(PatMatch(4,3,
			"?*@*"
			"*@@*"
			"*@*?",
			SimpleAssumption((PtypeMask)(TatehidariMask|HidariMask),JointStart,1.5,0.5,225,1)));
  pm.push_back(PatMatch(4,3,
			".@@."
			"@@@@"
			".@@.",
			Assumption()
			.add(SimpleAssumption(YokoMask,Mid,1.5,1,0,0))
			.add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),Mid,1.5,1,270,2))));
  pm.push_back(PatMatch(5,3,
			"..@@."
			"@@@@@"
			".@@..",
			Assumption()
			.add(SimpleAssumption(YokoMask,Mid,2,1,0,0))
			.add(SimpleAssumption((PtypeMask)(TatehidariMask|HidariMask),Mid,2,1,250,2))));
  pm.push_back(PatMatch(4,4,
			"?.??"
			".@.."
			".@@@"
			"?@?.",
			Assumption()
			.add(SimpleAssumption(YokoMask,JointStart,1.5,2,0,0))
			.add(SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),JointStart,1.5,2,270,2))));
  pm.push_back(PatMatch(5,3,
			"?...?"
			".@@@."
			".@@.?",
			SimpleAssumption((PtypeMask)(TateMask|TatehaneMask|TatehidariMask|HidariMask),Start,1.5,0.5,270,2)));
  pm.push_back(PatMatch(5,4,
			"*@@*?"
			"?.@@."
			"?.@@."
			"??..?",
			SimpleAssumption(TenMask,End,2.5,2.5,300,2)));
  pm.push_back(PatMatch(4,3,
			"*.??"
			"*@*?"
			"?*@*",
			SimpleAssumption(TenMask,Start,1,1,315,1)));
  pm.push_back(PatMatch(4,4,
			".@@."
			".@@@"
			".@@."
			"....",
			Assumption()
			.add(SimpleAssumption(YokoMask,JointStart,1.5,2,0,0))
			.add(SimpleAssumption(TateMask,JointEnd,1.5,1,270,2))));
  pm.push_back(PatMatch(4,5,
			".@@."
			".@@@"
			".@@."
			".@@."
			"....",
			Assumption()
			.add(SimpleAssumption(YokoMask,JointStart,1.5,2,0,0))
			.add(SimpleAssumption(TateMask,JointEnd,1.5,1,270,2))));
  pm.push_back(PatMatch(4,4,
			".@@."
			"@@@."
			".@@."
			"....",
			Assumption()
			.add(SimpleAssumption(YokoMask,JointEnd,1.5,2,0,0))
			.add(SimpleAssumption(TateMask,JointEnd,1.5,1,270,2))));
}

std::vector<MatchResult> Matchers::findMatch(const BitmapFont& bf) const{
  std::vector<MatchResult> mr;
  std::vector<PatMatch>::const_iterator it;
  for(it=pm.begin();it!=pm.end();it++)
    for(int y= -1; y<bf.getHeight(); y++)
      for(int x= -1;x<bf.getWidth();x++){
	int penalty=it->matchPenalty(bf,x,y);
	if(penalty>=0)
	  mr.push_back(MatchResult(x,y,*it,penalty));
      }
  return mr;
}
std::vector<pixel> Matchers::notCovered(const BitmapFont& bf) const{
  std::vector<MatchResult> mr=findMatch(bf);
  std::vector<std::set<int> > pixel2match(bf.getSize());
  std::vector<std::set<int> > match2pixel(mr.size());
  std::vector<MatchResult>::iterator it;
  for(it=mr.begin();it!=mr.end();it++){
    int n= it-mr.begin();
    std::vector<pixel> ps=(*it).getPixels();
    std::vector<pixel>::iterator ips;
    for(ips=ps.begin();ips!=ps.end();ips++){
      int m=bf.getIndex(*ips);
      std::cout << '(' << ips->first << ',' << ips->second << ")\n";
      assert(m != -1);
      match2pixel[n].insert(m);
      pixel2match[m].insert(n);
    }
  }
  std::vector<pixel> ret;
  for(int i=0;i<bf.getPixelSize();i++){
    if(pixel2match[i].empty()) {
      ret.push_back(bf.getPixelAt(i));
    }
  }
  return ret;
}
ostream& operator<<(ostream &os,const Matchers &mt){
  os << "Matchers(";
  std::vector<PatMatch>::const_iterator it;
  for(it=mt.pm.begin();it!=mt.pm.end();it++){
    os << *it << ','; 
  }
  os << ')';
  return os;
}
ostream& operator<<(ostream &os,const MatchResult &mr){
  os << "MatchResult(" << mr.x << "," << mr.y << "," << mr.pm 
     << "," << mr.penalty << ")";
  return os;
}

ktanaka

Powered by ViewCVS 1.0-dev

ViewCVS and CVS Help