void quality_calculate_part1(QualityResMap*p_resMap, vector<string> inputPathVec, char* logfilepath, vector<double> qualityRes) {
    int flag;
    vector<double> avgVec;
    avgVec.resize(5);

    flag = mainSignaltoNoiseRatio(inputPathVec[2], logfilepath, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["信噪比"].assign(qualityRes.begin(), qualityRes.end());
    avgVec[0] = qualityRes[0];

    flag = mainClarity(inputPathVec[2], logfilepath, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["清晰度"].assign(qualityRes.begin(), qualityRes.end());
    avgVec[1] = qualityRes[0];

    flag = mainContrastRatio(inputPathVec[2], logfilepath, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["对比度"].assign(qualityRes.begin(), qualityRes.end());
    avgVec[2] = qualityRes[0];

    flag = mainEntropy(inputPathVec[2], logfilepath, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["熵信息"].assign(qualityRes.begin(), qualityRes.end());
    avgVec[3] = qualityRes[0];

    flag = mainRadiationUniform(inputPathVec[2], logfilepath, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["均匀辐射"].assign(qualityRes.begin(), qualityRes.end());
    avgVec[4] = qualityRes[0];

    double total_score = mainComprehensiveEvaluate(avgVec);
    p_resMap->status = (int)(total_score+0.5);
    Log::Info("Comprehensive Evaluate Scoree is %lf", total_score);
}
void quality_calculate_part3(QualityResMap*p_resMap, vector<string> inputPathVec, char* logfilepath, vector<double> qualityRes) {
    int flag;
    flag = mainCrossEntropy(inputPathVec[0], inputPathVec[2], logfilepath, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["交叉熵"].assign(qualityRes.begin(), qualityRes.end());

    flag = mainMutualInformation(inputPathVec[0], inputPathVec[2], logfilepath, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["互信息"].assign(qualityRes.begin(), qualityRes.end());

    flag = mainStructureSimilarity(inputPathVec[0], inputPathVec[2], logfilepath, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["结构相似度"].assign(qualityRes.begin(), qualityRes.end());
}
void quality_calculate_part2(QualityResMap*p_resMap, vector<string> inputPathVec, char* logfilepath, vector<double> qualityRes) {
    int flag;
    flag = mainMean(inputPathVec[2], logfilepath, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["均值"].assign(qualityRes.begin(), qualityRes.end());

    flag = mainStriperesidual(inputPathVec[2], logfilepath, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["条纹残余度"].assign(qualityRes.begin(), qualityRes.end());

    flag = mainDynamicRange(inputPathVec[2], logfilepath, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["动态变化范围"].assign(qualityRes.begin(), qualityRes.end());

    flag = mainVariance(inputPathVec[2], logfilepath, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["方差"].assign(qualityRes.begin(), qualityRes.end());
}
Esempio n. 4
0
void WF_sum_avg<T>::operator()(int64_t b, int64_t e, int64_t c)
{
	uint64_t colOut = fFieldIndex[0];

	if ((fFrameUnit == WF__FRAME_ROWS) ||
		(fPrev == -1) ||
		(!fPeer->operator()(getPointer(fRowData->at(c)), getPointer(fRowData->at(fPrev)))))
	{
		// for unbounded - current row special handling
		if (fPrev >= b && fPrev < c)
			b = c;
		else if (fPrev <= e && fPrev > c)
			e = c;

		uint64_t colIn = fFieldIndex[1];
		int scale = fRow.getScale(colOut) - fRow.getScale(colIn);
		for (int64_t i = b; i <= e; i++)
		{
			if (i % 1000 == 0 && fStep->cancelled())
				break;

			fRow.setData(getPointer(fRowData->at(i)));
			if (fRow.isNullValue(colIn) == true)
				continue;

			T valIn;
			getValue(colIn, valIn);
			checkSumLimit(fSum, valIn);

			if ((!fDistinct) || (fSet.find(valIn) == fSet.end()))
			{
				fSum += valIn;
				fCount++;

				if (fDistinct)
					fSet.insert(valIn);
			}
		}

		if ((fCount > 0) && (fFunctionId == WF__AVG || fFunctionId == WF__AVG_DISTINCT))
			 fAvg = (T) calculateAvg(fSum, fCount, scale);
	}

	T* v = NULL;
	if (fCount > 0)
	{
		if (fFunctionId == WF__AVG || fFunctionId == WF__AVG_DISTINCT)
			v = &fAvg;
		else
			v = &fSum;
	}
	setValue(fRow.getColType(colOut), b, e, c, v);

	fPrev = c;
}
void ThermalEngine::calculateVariation(){

    ofColor c = prev(1).getColor(target_x  * camWidth , target_y * camHeight);
    float h = c.getBrightness();
    
    ofColor c1 = prev(2).getColor(target_x  * camWidth , target_y * camHeight);
    float h_1 = c1.getBrightness();

    float absDist = abs(h_1 - h) / 255.;
    
    absDist = ofClamp(absDist, 0, 1);
    
    dist.push_back(absDist);
    
    if(dist.size() > 100){
        dist.erase(dist.begin());
    }
    
    calculateAvg();
    
    saveThermal(absDist);
}
void quality_calculate_part4(QualityResMap* p_resMap, vector<string> inputPathVec, char* logfilepath, vector<int> bandlist, string interkind, vector<double> qualityRes) {
    int flag;
    flag = mainSpectralAngleMatrix(inputPathVec[1], inputPathVec[2], logfilepath, bandlist, interkind, qualityRes);
    calculateAvg(qualityRes);
    p_resMap->res["光谱角矩阵"].assign(qualityRes.begin(), qualityRes.end());
}