Revision Log
*** 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 |