示例#1
0
文件: asm.c 项目: KrowosDogg/iLab
tOperand parseLabelOperand(char *operand_name, tDatabase label_values)
{
    tOperand operand;
    tAddress value = getLabelValue(operand_name, label_values);
    if (value == -1)
    {
        operand = parseOperand(operand_name);
    }
    else
    {
        operand.type = 0;
        operand.value = value;
    }
    return operand;
}
示例#2
0
QVariant PropertyManager::getValue(QtProperty *prop)
{
	QtAbstractPropertyManager *mngr = prop->propertyManager();
	
	if (mngr == m_boolManager)
		return qVariantFromValue(getBoolValue(prop));
	else if (mngr == m_stringManager)
		return qVariantFromValue(getStringValue(prop));
	else if (mngr == m_intManager)
		return qVariantFromValue(getIntValue(prop));
	else if (mngr == m_scriptManager)
		return qVariantFromValue(getScriptValue(prop));
	else if (mngr == m_labelManager)
		return qVariantFromValue(getLabelValue(prop));

	return QVariant();
}
示例#3
0
int main(int argc,char** argv)
{
  AnalyzeImage tmp;
  AnalyzeLabelImage img1,img2;
  int i,j,k;
  bool jaccardStatus,completeStatus,mcrStatus;
  int dimx,dimy,dimz;
  unsigned char max1,max2;
  int tmpint,imgsize;
  int intstatus;
  int** confMatrix;
  float jaccard,mcr;
  int a,b,c; 
  unsigned char x,y;

  if(argc < 2) {
    cout << "Usage: cmatrix img1 img2 [jaccard/mcr]" << endl;
    return(1);
  }
  
  intstatus = readLabelImage(argv[1],&img1);
  if(intstatus != 0) {
    cout << "File " << argv[1] <<  "could not be opened " << intstatus << endl;
    return(2);
  }
  intstatus = readLabelImage(argv[2],&img2);
  if((intstatus != 0) && (intstatus < 4)) {
    cout << "File " << argv[2] << " could not be opened " << intstatus << endl;
    return(2);
  }
  if(intstatus == 4) {
    intstatus = readImage(argv[2],&tmp);
    if(intstatus != 0) {
      cout << "File " << argv[2] <<  "could not be opened " << intstatus << endl;
      return(2);
    }    
    newLabelImage(&img2,&tmp);
    imgsize = tmp.header.x_dim*tmp.header.y_dim*tmp.header.z_dim;
    for(i = 0;i < imgsize;i++) {
      img2.data[i] = (char) (ceil((tmp.data[i]) - 0.5));
    }
  }

  // check that the dimensions match
 
  dimx = img1.header.x_dim;
  dimy = img1.header.y_dim;
  dimz = img1.header.z_dim;

  if(!( (dimx == img2.header.x_dim) && (dimy == img2.header.y_dim) && (dimz == img2.header.z_dim))) {
    cout << "Dimensions did not match" << endl;
    return(3);
  }
  
  jaccardStatus = true;
  mcrStatus = true;
  completeStatus = true;

  if(argc > 3) {
    if(!strcmp("jaccard",argv[3])) {
      mcrStatus = false;
      completeStatus = false;
    }
    if(!strcmp("mcr",argv[3])) {
      jaccardStatus = false;
      completeStatus = false;
    }
  }
 
  max1 = labelMax(&img1);
  max2 = labelMax(&img2);
 

  if(max1 != max2) {
    if(max1 == 255) {
      for(i = 0;i < dimx*dimy*dimz;i++) {
        tmpint = img1.data[i] * max2;
        img1.data[i] = tmpint / 255;
      }
      max1 = labelMax(&img1);
    }
    if(max2 == 255) {
      for(i = 0;i < dimx*dimy*dimz;i++) {
        tmpint = img2.data[i] * max1;
        img2.data[i] = tmpint / 255;
      }
      max2 = labelMax(&img2);
    }
  }
  max1 = MAX(max1,max2);
  max2 = MAX(max1,max2);
  

  confMatrix = new int*[max1 + 1];
  for(i = 0;i < (max1 + 1);i++) {
    confMatrix[i] = new int[max2 + 1];
  }
  for(i = 0;i < (max1 + 1);i++) {
    for(j = 0;j < (max2 + 1);j++) {
      confMatrix[i][j] = 0;
    }
  }
 
  for(i = 0;i < dimx;i++) {
    for(j = 0;j < dimy;j++) {
      for(k = 0;k < dimz;k++) {
        x = getLabelValue(&img1,i,j,k);
	y = getLabelValue(&img2,i,j,k);
        confMatrix[x][y] = confMatrix[x][y] + 1;
      }
    }
  }
 
  if(completeStatus) {
    cout << "Confusion matrix" << endl;
    for(i = 0;i < (max1 + 1);i++) {
      for(j = 0;j < (max2 + 1);j++) {
        cout << confMatrix[i][j] << " ";
      }
      cout << endl; 
    }
    cout << "Jaccard" << endl;
  }
  if(jaccardStatus) {
    for(i = 0;i <  ( max1 + 1);i++) {
      a =  confMatrix[i][i];
      b = -a;
      for(j = 0;j <  ( max1 + 1);j++) {
        b = b + confMatrix[j][i];
      }
      c = -a;
      for(j = 0;j <  ( max2 + 1);j++) {
        c = c + confMatrix[i][j];
      } 
      jaccard = (float) a/( (float) (a + b + c));
      cout << jaccard;
      cout << " ";  
    }
    cout << endl;
  }
  if(mcrStatus) {
    a = 0;
    for(i = 1;i <  ( max1 + 1);i++) {
      a =  a + confMatrix[i][i];
    }
    b = 0;
    for(i = 1;i <  ( max1 + 1);i++) {
      for(j = 1;j <  ( max1 + 1);j++) {
        b =  b + confMatrix[i][j];
      }
    }
    mcr = (float) a / (float) b;
    cout << mcr;
    cout << endl;
  }
  return(0);

}