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; }
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); }
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]); } }