added dp calcualtion

This commit is contained in:
Raphael Maenle
2018-01-29 20:05:37 +01:00
parent a6da2298c8
commit cf576db19d
5 changed files with 73 additions and 38 deletions

View File

@ -16,6 +16,11 @@ bool DestructionPower::PreProcessing(coor mySize,const vector<Part*>* partArray)
cout << "DestructionPower Preprocessing... ";
InitialiseConstraintMatrixSize(mySize.col,mySize.row);
for(auto& it:m_constraintMatrix)
for(auto& ti:it)
for(int i=0;i<DESTRUCTION_COUNT;i++)
ti.DestructionArray.push_back(0);
cout << "Done!" << endl;
return true;
}
@ -31,27 +36,36 @@ bool DestructionPower::SetConstraintOnPosition(const coor constraintCoordinate,
bool DestructionPower::RemoveConstraintOnPosition(const coor constraintCoordinate)
{
for(int i=0;i<m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray.size();i++)
m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray[i]=0;
}
//gets destruction power from left and from top if possible and normalizes
void DestructionPower::DestructionOfSurrounding(const coor constraintCoordinate) {
for(int i = 0; i < m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray.size(); ++i)
m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray.pop_back();
for (int i = 0; i < DESTRUCTION_COUNT; ++i) {
m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray.push_back(0);
for (int i = 0; i < DESTRUCTION_COUNT; ++i) {
int divisor=0;
if(constraintCoordinate.row > 0)
//check if not at edge and if information is valid
if(constraintCoordinate.row > 0 && m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row-1].DestructionArray[i] > 0)
{
divisor++;
m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray[i] += m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row-1].DestructionArray[i];
}
if(constraintCoordinate.col > 0)
if(constraintCoordinate.col > 0 && m_constraintMatrix[constraintCoordinate.col-1][constraintCoordinate.row].DestructionArray[i] > 0)
{
divisor++;
m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray[i] += m_constraintMatrix[constraintCoordinate.col-1][constraintCoordinate.row].DestructionArray[i];
}
if(constraintCoordinate.col < m_constraintMatrix.size()-1 && m_constraintMatrix[constraintCoordinate.col+1][constraintCoordinate.row].DestructionArray[i] > 0)
{
divisor++;
m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray[i] += m_constraintMatrix[constraintCoordinate.col+1][constraintCoordinate.row].DestructionArray[i];
}
if(constraintCoordinate.row < m_constraintMatrix[i].size()-1 && m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row+1].DestructionArray[i] > 0)
{
divisor++;
m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray[i] += m_constraintMatrix[constraintCoordinate.col-1][constraintCoordinate.row].DestructionArray[i];
}
if(divisor)
m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray[i] /=divisor;
else
@ -63,19 +77,16 @@ void DestructionPower::DestructionOfSurrounding(const coor constraintCoordinate)
}
}
float DestructionPower::defaultDestructionPower(int i)
{
}
//gets next highest valued abstraction layer down from current one (if first, get highest)
int DestructionPower::getNextAbstractionLayer(coor newCoordinate, int currentAbstractionLayer)
{
//hardcode advance
if(currentAbstractionLayer<DESTRUCTION_COUNT)
return ++currentAbstractionLayer;
return -1;
// if(currentAbstractionLayer<DESTRUCTION_COUNT-1)
// return ++currentAbstractionLayer;
// return -1;
if(currentAbstractionLayer==-1)
return 0;//poempel in out
float currentPower = 1;
int nextLayer=-1;
float nextLayerPower=0;

View File

@ -1,6 +1,6 @@
#pragma once
//TODO!! increase Destructioncount
#define DESTRUCTION_COUNT 2
#define DESTRUCTION_COUNT 3
#include "DestructionPower_Properties.h"
#include "../AbstraktionLayer_Base.h"

View File

@ -21,13 +21,12 @@ bool AbstractionLayer_ColorMatching::PreProcessing(coor mySize, const vector<Par
for (int r = 0; r < mySize.row; r++) {
for (int c = 0; c < mySize.col; c++) {
Mat ExtPart = puzzle(CvRect(c*X, r*Y, X, Y));
Mat ExtPart = puzzle(CvRect(c * X, r * Y, X, Y));
// crop image to ROI
Mat ExtPartCropped = ExtPart(
Rect(ExtPart.size().width / 3, ExtPart.size().height / 3, ExtPart.size().width / 3,
ExtPart.size().height / 3));
// Create a new matrix to hold the HSV image
Mat HSVExtPart;
// convert RGB image to HSV
@ -166,14 +165,19 @@ bool AbstractionLayer_ColorMatching::EvaluateQuality (const coor constraintCoord
{
for(int i = 0;i<qVector.size();i++)
{
float value1 = PlaceOfPartGood(constraintCoordinate, qVector[i].second->m_acm.m_centerColor);
//float value1 = PlaceOfPartGood(constraintCoordinate, qVector[i].second->m_acm.m_centerColor);
if(constraintCoordinate.col==5 && constraintCoordinate.row ==27)
{
;
}
float value1 = (float)(1-(abs(m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].m_centerColor.h-qVector[i].second->m_acm.m_centerColor.h))/180);
float value2 = (float)(1-(abs(m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].m_centerColor.s-qVector[i].second->m_acm.m_centerColor.s))/255);
float value3 = (float)(1-(abs(m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].m_centerColor.v-qVector[i].second->m_acm.m_centerColor.v))/255);
qVector[i].first = (value1+value2+value3)/3;
qVector[i].first = (value1*4+value2*2+value3*1)/6;
}
}