example for usage of MixtureOfGaussians scene change detection. see constructor for parameters used in this example. it has been tested with point grey grasshopper camera and a region of interest has been set specifically for this.
#include "ExampleMixtureOfGaussians.hh"
#include <Base/Image/ImageIO.hh>
#include <Base/Common/FileHandling.hh>
using namespace BIAS;
using namespace std;
bool ExampleMixtureOfGaussians::OnInit()
{
wxSize(400,340));
mainFrame->SetSizeHints(640,480,1800,1600);
std::vector<string> files,filesFL;
if(argc > 1){
if(argc > 2){
}
}
else
mainFrame->Show(true);
SetTopWindow(mainFrame);
return true;
}
EVT_MENU (
ID_Quit, ExampleMixtureOfGaussiansFrame::OnQuit)
EVT_MENU (
ID_Grab, ExampleMixtureOfGaussiansFrame::OnGrab)
EVT_MENU (
ID_Show1, ExampleMixtureOfGaussiansFrame::OnShowImage1)
EVT_MENU (
ID_Show2, ExampleMixtureOfGaussiansFrame::OnShowImage2)
EVT_MENU (
ID_Show3, ExampleMixtureOfGaussiansFrame::OnShowImage3)
EVT_MENU (
ID_Show4, ExampleMixtureOfGaussiansFrame::OnShowImage4)
EVT_MENU (
ID_Show5, ExampleMixtureOfGaussiansFrame::OnShowImage5)
EVT_MENU (
ID_Show6, ExampleMixtureOfGaussiansFrame::OnShowImage6)
EVT_MENU (
ID_Show7, ExampleMixtureOfGaussiansFrame::OnShowImage7)
EVT_MENU (
ID_Show8, ExampleMixtureOfGaussiansFrame::OnShowImage8)
EVT_MENU (
ID_Show9, ExampleMixtureOfGaussiansFrame::OnShowImage9)
EVT_MENU (
ID_Show_FL, ExampleMixtureOfGaussiansFrame::OnShowFL)
EVT_MENU (
ID_Controller, ExampleMixtureOfGaussiansFrame::OnShowController)
EVT_TIMER (
ID_Timer, ExampleMixtureOfGaussiansFrame::OnTimer)
EVT_KEY_DOWN (ExampleMixtureOfGaussiansFrame::OnKey)
END_EVENT_TABLE()
ExampleMixtureOfGaussiansFrame::
ExampleMixtureOfGaussiansFrame(const wxString& title,
const wxPoint& pos, const wxSize& size)
: wxFrame(NULL, -1, title, pos, size)
{
mog_->SetSmoothing(false);
mogFL_->SetSmoothing(false);
CameraFL_= NULL;
Camera_= NULL;
bShowImageFL_=false;
roi_.UL[0] = 0;
roi_.UL[1] = 0;
roi_.LR[0] = 00;
roi_.LR[1] = 00;
downsample_ = false;
CreateStatusBar(3);
wxString text;
text.Printf(wxT("size: %4dx%4d"),0, 0);
SetStatusText(text, 2);
IC_ =
new ImageCanvas(
this,GetStatusBar(), 0,-1,wxDefaultPosition,
wxSize(1024,768));
wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL);
vbox->Add(IC_,1, wxEXPAND |wxALL |wxFIXED_MINSIZE , 5);
vbox->SetMinSize(640,480);
SetSizer(vbox);
SetAutoLayout(true);
Layout();
Timer_.SetOwner(this, ID_Timer);
Timer_.Start(50,true);
StopWatch_.Start();
ShowImage_ = &CamImg_;
dCurImage_ = 0;
guardimagemutex = new pthread_mutex_t;
guarddiffimagemutex = new pthread_mutex_t;
pthread_mutex_init(guardimagemutex, NULL);
pthread_mutex_init(guarddiffimagemutex, NULL);
barrier = new pthread_barrier_t;
pthread_barrier_init(barrier, NULL, 2);
}
if(fileNames != NULL && fileNames->size() > 0){
}
else{
if(Camera_->OpenDevice() != 0){
delete Camera_;
BIASERR("No DCAM present!");
return;
}
}
Camera_->InitImage(CamImgOrg_);
CamImgOrgRGB_.Init(CamImgOrg_.GetWidth(), CamImgOrg_.GetHeight(),3);
Camera_->PreGrab();
pthread_create(&grabthread, NULL, grabImages_, this);
pthread_create(&processthread, NULL, processImages_, this);
}
if(fileNames != NULL && fileNames->size() > 0){
}
else{
BIASERR("No way!");
}
CameraFL_->PreGrab();
}
wxMenu *menuFile = new wxMenu;
menuFile->Append(ID_Quit, wxT("E&xit") );
wxMenu *menuShow = new wxMenu;
menuShow->Append(ID_Show1, wxT("Original Image") );
menuShow->Append(ID_Show2, wxT("Normalized Image") );
menuShow->Append(ID_Show3, wxT("Weight Image") );
menuShow->Append(ID_Show4, wxT("Difference Image") );
menuShow->Append(ID_Show5, wxT("Visualization") );
menuShow->AppendSeparator();
if(CameraFL_ != NULL){
pCheckItemFL_=
menuShow->AppendCheckItem(ID_Show_FL ,
wxT("&Show float images"),
wxT(""));
pCheckItemFL_->Check(false);
}
menuShow->Append(ID_Controller, wxT("Controller") );
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append(menuFile, wxT("&File"));
menuBar->Append(menuShow, wxT("&Show"));
SetMenuBar(menuBar);
Fit();
}
Timer_.Stop();
Close(true);
}
dCurImage_ = 0;
}
dCurImage_ = 1;
}
dCurImage_ = 2;
}
dCurImage_ = 3;
}
dCurImage_ = 4;
}
bShowImageFL_ = event.IsChecked();
}
ExampleMixtureOfGaussiansFrame *obj = static_cast<ExampleMixtureOfGaussiansFrame*>(thisvisu);
do {
} else {
}
pthread_barrier_wait(obj->
barrier);
return NULL;
}
ExampleMixtureOfGaussiansFrame *obj = static_cast<ExampleMixtureOfGaussiansFrame*>(thisvisu);
do {
pthread_barrier_wait(obj->
barrier);
return NULL;
}
Timer_.Stop();
StopWatch_.Stop();
double fps = 1000000.0 / StopWatch_.GetRealTime();
StopWatch_.Reset();
StopWatch_.Start();
FrameCounter_++;
wxString text;
text.Printf(wxT("%05d %2.1f fps "),FrameCounter_, fps);
SetStatusText(text, 2);
pthread_mutex_lock(guardimagemutex);
CamImg_ = CamImgOrgRGB_;
pthread_mutex_unlock(guardimagemutex);
unsigned int w,h;
w = CamImg_.GetWidth();
h = CamImg_.GetHeight();
text.Printf(wxT("size: %4dx%4d"),w, h);
SetStatusText(text, 1);
if (w != Width_ || h != Height_)
{
Width_ = w;
Height_ = h;
IC_->SetSize(w+50,h+80);
SetMinSize(wxSize(w+50,h+80));
Fit();
}
if(CameraFL_ != NULL){
CameraFL_->GrabSingle(CamImgOrgFL_);
if (downsample_) {
if (CamImgRescaledFL_.IsEmpty())
CamImgRescaledFL_.
Init(CamImgOrgFL_.GetWidth()/2,CamImgOrgFL_.GetHeight()/2,1);
pRescaleFilter.
Downsample (CamImgOrgFL_,CamImgFL_,2);
}
else
CamImgFL_ = CamImgOrgFL_;
w = CamImgFL_.GetWidth();
h = CamImgFL_.GetHeight();
CamImgFL_.SetROI(15,15,w-15,h-15);
mogFL_->Apply(CamImgFL_);
}
static int n=0;
n++;
if (n>100) {
mog_->AllowCreationOfNewDistributions(false);
mog_->SetUpdateFactor(0.0f);
mog_->EnableCleanup(true, true, false);
}
switch (dCurImage_) {
case 0:
if(bShowImageFL_) {
CamImgFL_.ScaleShiftBetween(0,255);
ShowImage_ = &tmpUC;
}
else ShowImage_ = &CamImg_;
break;
case 1:
if(bShowImageFL_) {
mogFL_->GetNormalizedImage(tmp);
}else{
mog_->GetNormalizedImage(tmp);
}
ShowImage_ = &CamImgNormalizedChar_;
break;
case 2:
if(bShowImageFL_)
mogFL_->GetWeightImage(tmp);
else
mog_->GetMatchValueImage(tmp);
ShowImage_ = &WeightImgChar_;
break;
case 3:
if(bShowImageFL_)
mogFL_->GetDifferenceImage(DifferenceImgChar_);
else
mog_->GetDifferenceImage(DifferenceImgChar_);
ShowImage_ = &DifferenceImgChar_;
break;
case 4:
if(bShowImageFL_)
mogFL_->GetDifferenceImageWithVisuals(DifferenceImgCharRGB_);
else
mog_->GetDifferenceImageWithVisuals(DifferenceImgCharRGB_);
ShowImage_ = &DifferenceImgCharRGB_;
break;
default:
ShowImage_ = &CamImg_;
break;
}
IC_->Show(*ShowImage_, "Camera Image");
Timer_.Start(30, true);
}
}