|
|
|
|
@ -295,101 +295,106 @@ bool ImageCompareModel::save2file(string filePath)
|
|
|
|
|
|
|
|
|
|
bool ImageCompareModel::readFromFile(string filePath)
|
|
|
|
|
{
|
|
|
|
|
FileStorage fs(filePath, FileStorage::READ);
|
|
|
|
|
if (!fs.isOpened())
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
FileStorage fs(filePath, FileStorage::READ);
|
|
|
|
|
if (!fs.isOpened())
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fs[IMGCMP_STR_ALIGN_BASE_IMAGE] >> mAlignBaseImg;
|
|
|
|
|
fs[IMGCMP_STR_COMPARE_BASE_IMAGE] >> mCompareBaseImg;
|
|
|
|
|
fs[IMGCMP_STR_WEIGHT_MAT] >> mWeightMat;
|
|
|
|
|
fs[IMGCMP_STR_INSIDE_AVE_IMAGE] >> mInSideBaseImg;
|
|
|
|
|
fs[IMGCMP_STR_INSIDE_COMP_AVE_IMAGE] >> mInsideCompareBaseImg;
|
|
|
|
|
fs[IMGCMP_STR_INSIDE_WEIGHT] >> mInsideWeightMat;
|
|
|
|
|
fs[IMGCMP_STR_INSIDE_TEMPL] >> innerTempl;
|
|
|
|
|
mMatchValScale = (double)fs[IMGCMP_STR_MATCH_VAL_SCALE];
|
|
|
|
|
|
|
|
|
|
FileNode fn = fs[IMGCMP_STR_TARGET_MEAN_VAL];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mTargetMeanVal = (int)fn;
|
|
|
|
|
}
|
|
|
|
|
fs[IMGCMP_STR_ALIGN_BASE_IMAGE] >> mAlignBaseImg;
|
|
|
|
|
fs[IMGCMP_STR_COMPARE_BASE_IMAGE] >> mCompareBaseImg;
|
|
|
|
|
fs[IMGCMP_STR_WEIGHT_MAT] >> mWeightMat;
|
|
|
|
|
fs[IMGCMP_STR_INSIDE_AVE_IMAGE] >> mInSideBaseImg;
|
|
|
|
|
fs[IMGCMP_STR_INSIDE_COMP_AVE_IMAGE] >> mInsideCompareBaseImg;
|
|
|
|
|
fs[IMGCMP_STR_INSIDE_WEIGHT] >> mInsideWeightMat;
|
|
|
|
|
fs[IMGCMP_STR_INSIDE_TEMPL] >> innerTempl;
|
|
|
|
|
mMatchValScale = (double)fs[IMGCMP_STR_MATCH_VAL_SCALE];
|
|
|
|
|
|
|
|
|
|
FileNode fn = fs[IMGCMP_STR_TARGET_MEAN_VAL];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mTargetMeanVal = (int)fn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn = fs[IMGCMP_STR_TARGET_STDDEV_VAL];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mTargetStddevVal = (int)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_TARGET_STDDEV_VAL];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mTargetStddevVal = (int)fn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn = fs[IMGCMP_STR_REPEAT_NUM];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mRepeatNum = (int)fn;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//mRepeatNum = computeRepeatNum();
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_REPEAT_NUM];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mRepeatNum = (int)fn;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//mRepeatNum = computeRepeatNum();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn = fs[IMGCMP_STR_NAME];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mName = (string)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_NAME];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mName = (string)fn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_MEAN];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mTrueSampleDisMean = (double)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_STDDEV];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mTrueSampleDisStddev = (double)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_MIN];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mTrueSampleDisMin = (double)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_MAX];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mTrueSampleDisMax = (double)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_FALSE_SAMPLE_MIN_DIS];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
setFalseSampleMinDis((double)fn);
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_DIS_THRE];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mDisThre = (double)fn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn = fs[IMGCMP_STR_AVER_DIAMETER];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
meanDiameter = (int)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_MEAN];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mTrueSampleDisMean = (double)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_STDDEV];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mTrueSampleDisStddev = (double)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_MIN];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mTrueSampleDisMin = (double)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_TRUE_SAMPLE_DIS_MAX];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mTrueSampleDisMax = (double)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_FALSE_SAMPLE_MIN_DIS];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
setFalseSampleMinDis((double)fn);
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_DIS_THRE];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mDisThre = (double)fn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn = fs[IMGCMP_STR_INSIDE_RADIUS];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
rInner = (float)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_INSIDE_CIRCLE_NUM];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mInnerCircleNum = (double)fn;
|
|
|
|
|
}
|
|
|
|
|
setFilePath(filePath);
|
|
|
|
|
fn = fs[IMGCMP_STR_AVER_DIAMETER];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
meanDiameter = (int)fn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
genMask();
|
|
|
|
|
fn = fs[IMGCMP_STR_INSIDE_RADIUS];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
rInner = (float)fn;
|
|
|
|
|
}
|
|
|
|
|
fn = fs[IMGCMP_STR_INSIDE_CIRCLE_NUM];
|
|
|
|
|
if (!fn.empty())
|
|
|
|
|
{
|
|
|
|
|
mInnerCircleNum = (double)fn;
|
|
|
|
|
}
|
|
|
|
|
setFilePath(filePath);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
genMask();
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
catch (std::exception &e) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ImageCompareModel::preProcessImage(Mat& img, Mat &insideImg) const
|
|
|
|
|
|