1、增加根据轮毂尺寸选择轮毂中间抠图部分尺寸的大小2、注释掉检测软件生成dump的代码

master
QuShuailong 4 years ago
parent 58c5c24471
commit 108706cad5

@ -40,9 +40,11 @@
#define IMGCMP_CACHE_MAX_SIZE 100
#define MIN_CIRCLE_RADII 5
#define MAX_CIRCLE_RADII 110
#define MAX_CIRCLE_RADII_15 110 //15英寸轮毂内部抠图半径
#define MAX_CIRCLE_RADII_10 145 //10英寸轮毂内部抠图半径
#define MIN_INSIDE_RATIO 0.012
#define MAX_INSIDE_RATIO 0.023
#define PIXEL_IN_RATIO 125 //每英寸占多少像素
int ImageCompareModel::m_parallelFlag = 0;
cv::Point2f ImageCompareModel::refineCircleCen(const Mat& img, Point2f cen)
@ -501,18 +503,51 @@ double ImageCompareModel::compare(Mat srcImage, Mat* pRImg /*= NULL*/, int level
return cacheIter->second;
}
}
int x_Axis = srcImage.cols / 2 - MAX_CIRCLE_RADII;
int y_Axis = srcImage.rows / 2 - MAX_CIRCLE_RADII;
int r_Axis = 2 * MAX_CIRCLE_RADII;
int srcImageWidth = srcImage.cols;
int srcImageHeight = srcImage.rows;
//int x_Axis = srcImageWidth / 2 - MAX_CIRCLE_RADII;
//int y_Axis = srcImageHeight / 2 - MAX_CIRCLE_RADII;
//int r_Axis = 2 * MAX_CIRCLE_RADII;
//if (x_Axis <= 0 || y_Axis <= 0)
// return DBL_MAX;
//if (r_Axis <= 0)
// return DBL_MAX;
//if (r_Axis >= srcImageWidth || r_Axis >= srcImageHeight)
// return DBL_MAX;
//if (srcImageWidth < (srcImageWidth / 2 + MAX_CIRCLE_RADII) || srcImageHeight < (srcImageHeight / 2 + MAX_CIRCLE_RADII))
// return DBL_MAX;
//辨别轮毂尺寸来选择对应尺寸的抠图半径,和内外特征占比权重
int diameter = std::max(srcImageWidth, srcImageHeight);
float ratio = (float)diameter / PIXEL_IN_RATIO;
float diff1 = std::abs(ratio - 5);
float diff2 = std::abs(ratio - 7.5);
float alpha1 = 0, alpha2 = 0;
int max_circle_radii = 0;
if (diff1 < diff2)
{
alpha1 = 0.5;
alpha2 = 0.5;
max_circle_radii = MAX_CIRCLE_RADII_10;
}
else
{
alpha1 = 0.6;
alpha2 = 0.4;
max_circle_radii = MAX_CIRCLE_RADII_15;
}
int x_Axis = srcImageWidth / 2 - max_circle_radii;
int y_Axis = srcImageHeight / 2 - max_circle_radii;
int r_Axis = 2 * max_circle_radii;
if (x_Axis <= 0 || y_Axis <= 0)
return DBL_MAX;
if (r_Axis <= 0)
return DBL_MAX;
if (r_Axis >= srcImage.cols || r_Axis >= srcImage.rows)
if (r_Axis >= srcImageWidth || r_Axis >= srcImageHeight)
return DBL_MAX;
if (srcImageWidth < (srcImageWidth / 2 + max_circle_radii) || srcImageHeight < (srcImageHeight / 2 + max_circle_radii))
return DBL_MAX;
if (srcImage.cols < (srcImage.cols / 2 + MAX_CIRCLE_RADII) || srcImage.rows < (srcImage.rows / 2 + MAX_CIRCLE_RADII))
return DBL_MAX;
Rect rect(x_Axis, y_Axis, r_Axis, r_Axis);
Mat srcCenterMat;
@ -602,7 +637,7 @@ double ImageCompareModel::compare(Mat srcImage, Mat* pRImg /*= NULL*/, int level
m_parallelFlag = 1;
double retInside = genMatchValue(camInsideMat, mInsideCompareBaseImg, unifiedInsideMask, 0, rawImg.rows, md_diameter, md_height);//得出相似值
ret = 0.6*ret + 0.4*retInside;
ret = alpha1*ret + alpha2*retInside;
if (ret > mDisThre)
{
@ -675,9 +710,29 @@ void ImageCompareModel::train(const vector<Mat>& vec)
//bob edit
float startX = originalMat.cols / 2.0 - MAX_CIRCLE_RADII;//找最大圆外径,固定直径
float startY = originalMat.rows / 2.0 - MAX_CIRCLE_RADII;
Rect rect(startX, startY, MAX_CIRCLE_RADII * 2, MAX_CIRCLE_RADII * 2);
int originalMatWidth = originalMat.cols;
int originalMatHeight = originalMat.rows;
//float startX = originalMat.cols / 2.0 - MAX_CIRCLE_RADII;//找最大圆外径,固定直径
//float startY = originalMat.rows / 2.0 - MAX_CIRCLE_RADII;
//Rect rect(startX, startY, MAX_CIRCLE_RADII * 2, MAX_CIRCLE_RADII * 2);
int diameter = std::max(originalMatWidth, originalMatHeight);
float ratio = (float)diameter / PIXEL_IN_RATIO;
float diff1 = std::abs(ratio - 5);
float diff2 = std::abs(ratio - 7.5);
int max_circle_radii = 0;
if (diff1 < diff2)
{
max_circle_radii = MAX_CIRCLE_RADII_10;
}
else
max_circle_radii = MAX_CIRCLE_RADII_15;
float startX = originalMatWidth / 2.0 - max_circle_radii;//找最大圆外径,固定直径
float startY = originalMatHeight / 2.0 - max_circle_radii;
Rect rect(startX, startY, max_circle_radii * 2, max_circle_radii * 2);
Mat origianlCenterMat;
originalMat(rect).copyTo(origianlCenterMat);

@ -5,10 +5,11 @@
#include "QSignleApplication.h"
#include "dumpfile.h"
#pragma execution_character_set("utf-8")
int main(int argc, char *argv[])
{
DeclareDumpFile();
//DeclareDumpFile();
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
IMainWidget* pMain = nullptr;
QWidget* pMainWid = nullptr;

@ -22,9 +22,9 @@
#include "databasesql.h"
#include "lpCryptokey.h"
#define VERSION_HUB "3.0.5.0"
#define VERSION_ALG "3.0.1.4"
#define UPDATE_TIME "2021-12-19"
#define VERSION_HUB "3.0.5.1"
#define VERSION_ALG "3.0.1.5"
#define UPDATE_TIME "2021-12-24"
#pragma execution_character_set("utf-8")
#define MODEL_UI_ICON_NONE ":/image/no-img"

Loading…
Cancel
Save