static Matrix generateReference(const ImageVector& images)
{
    Matrix reference(images.size(), 1);
    
    for(size_t i = 0; i < images.size(); ++i)
    {
        reference(i, 0) = images[i].label() == "reference" ? 1.0f : 0.0f;
    
        //std::cout << "reference: " << reference(i, 0) << "\n";
    }
    
    return reference;
}
예제 #2
0
void CRemoteDoc::OnMENUITEMPCAFusion() 
{
	using namespace rss;

	POSITION pos=GetDocTemplate()->GetFirstDocPosition();

	ImageVector<image_type> images;

	while(pos) {
		CRemoteDoc *pDoc= (CRemoteDoc *) (GetDocTemplate()->GetNextDoc(pos));

		if(pDoc) 
			images.push_back(pDoc->GetImage());
		else 
			break;
	}

	if(images.size()<=1) return;

	int width = images[0].width();
	int height = images[0].height();

	PCAFusion<image_type> fusion(width, height);		

	//images.resize_image(images[0].width(), images[0].height());

	BilinearInterpolation<image_type> interpolate(Size(width, height));
	for(size_t i=0; i<images.size(); i++) {
		image_type result;
		interpolate.operator ()(images[i], result);
		images[i]=result;
	}

	//CRemoteDoc *pResultDoc=(CRemoteDoc *) GetDocTemplate()->CreateNewDocument();
	//CFrameWnd * pWnd=GetDocTemplate()->CreateNewFrame(pResultDoc, 0);

	image_type result;
	clock_t start = clock();
	fusion(images, result);
	clock_t end = clock();
	CString title;
	title.Format("%f", static_cast<double>(end - start) / CLOCKS_PER_SEC);	
	theApp.GetMainWnd()->GetTopLevelParent()->SetWindowText(title.GetBuffer());

	SetImage(result);

	//pResultDoc->SetModifiedFlag( TRUE );
	//pWnd->InitialUpdateFrame(pResultDoc, true);
}
예제 #3
0
 void Machinery::initialize(ImageVector & images)
 {
     m_algorithm->initialize(images);
     for(int i = 0; i < m_ios.size(); i++)
     {
         m_ios[i]->save(*images[images.size()-1]);
     }
 }