diff --git a/Code/Visu/otbGLVectorImageViewClick.h b/Code/Visu/otbGLVectorImageViewClick.h index 0d04851a6858606e534910aaee139f437c6c1846..602c8b227bd57e9f9db14f0f6c88ff783cf2e10f 100755 --- a/Code/Visu/otbGLVectorImageViewClick.h +++ b/Code/Visu/otbGLVectorImageViewClick.h @@ -277,23 +277,23 @@ public: // Overlay bool cOverlay; - /*! Activate overlay on image */ - void ActivateOverlay(bool b); + /*! Activate overlays on image */ + void ActivateOverlayFirst(bool b); + void ActivateOverlaySecond(bool b); bool cViewOverlayData; /*! Specify the 3D image to view as an overlay */ - void SetInputOverlay( OverlayPointer newOverlayData, - OverlayPointer newOverlayDataClassRed, - OverlayPointer newOverlayDataClassBlue); + void SetInputOverlay( OverlayPointer newOverlayDataClassFirst, + OverlayPointer newOverlayDataClassSecond); /*! Return a pointer to the overlay data */ const OverlayPointer & GetInputOverlay(void) const; /*! Return a pointer to the overlay data for the Red Class*/ - const OverlayPointer & GetInputOverlayClassRed(void) const; + const OverlayPointer & GetInputOverlayClassFirst(void) const; /*! Return a pointer to the overlay data for the Blue Class*/ - const OverlayPointer & GetInputOverlayClassBlue(void) const; + const OverlayPointer & GetInputOverlayClassSecond(void) const; /*! Turn on/off the viewing of the overlay */ void ViewOverlayData(bool newViewOverlayData); @@ -335,18 +335,25 @@ protected: //M�thodes utilis�es pour l'overlay de l'image bool cValidOverlayData; + //Booleens permettant l'affichage des overlays de la classification + bool cViewOverlayClassFirst; + bool cViewOverlayClassSecond; + float cOverlayOpacity; // Overlay utilis� pour afficher le r�sultat de la classification - OverlayPointer cOverlayData; - // Overlay utilis� pour afficher le r�sultat de la classe #Rouge - OverlayPointer cOverlayDataClassRed; - // Overlay utilis� pour afficher le r�sultat de la classe #Bleu - OverlayPointer cOverlayDataClassBlue; + // OverlayPointer cOverlayData; + // Overlay utilis� pour afficher le r�sultat de la classe #C1 + OverlayPointer cOverlayDataClassFirst; + // Overlay utilis� pour afficher le r�sultat de la classe #C2 + OverlayPointer cOverlayDataClassSecond; + void (* cViewOverlayCallBack)(void); ImageModeType cImageMode; - unsigned char * cWinOverlayData; + //unsigned char * cWinOverlayData; + unsigned char * cWinOverlayDataFirst; + unsigned char * cWinOverlayDataSecond; unsigned int cOverlayColorIndex; ColorTablePointer cColorTable; diff --git a/Code/Visu/otbGLVectorImageViewClick.txx b/Code/Visu/otbGLVectorImageViewClick.txx index e06124930352dc76fdbe75f94a6dbe3725da02e1..a9abbcafc9285b030fb3594ae164b44d99818043 100755 --- a/Code/Visu/otbGLVectorImageViewClick.txx +++ b/Code/Visu/otbGLVectorImageViewClick.txx @@ -42,9 +42,12 @@ GLVectorImageViewClick() : VectorImageView<TPixel>(), Fl_Gl_Window(0,0,0,0,0) cOverlay = false ; cValidOverlayData = false; cViewOverlayData = false; + cViewOverlayClassFirst = false; + cViewOverlayClassSecond = false; cViewOverlayCallBack = NULL; cOverlayOpacity = 0.0; - cWinOverlayData = NULL; + cWinOverlayDataFirst = NULL; + cWinOverlayDataSecond = NULL; cOverlayColorIndex = 7; //default white cClickMode = CM_SELECT; @@ -396,7 +399,8 @@ update() //memset( this->cWinImData, 0, this->cWinDataSizeX*this->cWinDataSizeY ); if( this->cValidOverlayData ) { - memset(this->cWinOverlayData, 0, this->cWinDataSizeX*this->cWinDataSizeY*4); + memset(this->cWinOverlayDataFirst, 0, this->cWinDataSizeX*this->cWinDataSizeY*4); + memset(this->cWinOverlayDataSecond, 0, this->cWinDataSizeX*this->cWinDataSizeY*4); } IndexType ind; @@ -425,18 +429,32 @@ update() { ind[0] = j; - m = (int)*((unsigned char *)&(cOverlayData->GetPixel(ind))); - cWinOverlayData[l+0] = - ((unsigned char *)&(cOverlayData->GetPixel(ind)))[0]; - cWinOverlayData[l+1] = - ((unsigned char *)&(cOverlayData->GetPixel(ind)))[1]; - cWinOverlayData[l+2] = - ((unsigned char *)&(cOverlayData->GetPixel(ind)))[2]; - if (cWinOverlayData[l+0]==255) - cWinOverlayData[l+3] = (unsigned char)(0); + //m = (int)*((unsigned char *)&(cOverlayDataFirst->GetPixel(ind))); + + //Donnees pour l'overlay de la classe #C1 + cWinOverlayDataFirst[l+0] = + ((unsigned char *)&(cOverlayDataClassFirst->GetPixel(ind)))[0]; + cWinOverlayDataFirst[l+1] = + ((unsigned char *)&(cOverlayDataClassFirst->GetPixel(ind)))[1]; + cWinOverlayDataFirst[l+2] = + ((unsigned char *)&(cOverlayDataClassFirst->GetPixel(ind)))[2]; + if (cWinOverlayDataFirst[l+0]==255) + cWinOverlayDataFirst[l+3] = (unsigned char)(0); else - cWinOverlayData[l+3] = (unsigned char)(255); + cWinOverlayDataFirst[l+3] = (unsigned char)(255); + //Donnees pour l'overlay de la classe #C2 + cWinOverlayDataSecond[l+0] = + ((unsigned char *)&(cOverlayDataClassSecond->GetPixel(ind)))[0]; + cWinOverlayDataSecond[l+1] = + ((unsigned char *)&(cOverlayDataClassSecond->GetPixel(ind)))[1]; + cWinOverlayDataSecond[l+2] = + ((unsigned char *)&(cOverlayDataClassSecond->GetPixel(ind)))[2]; + if (cWinOverlayDataSecond[l+0]==255) + cWinOverlayDataSecond[l+3] = (unsigned char)(0); + else + cWinOverlayDataSecond[l+3] = (unsigned char)(255); + l+=4; //if(j-this->cWinMinX >= (int)this->cWinDataSizeX) // continue; @@ -537,17 +555,27 @@ void GLVectorImageViewClick<TPixel,TPixelOverlay>::draw(void) glDrawPixels(this->cWinDataSizeX,this->cWinDataSizeY, GL_RGB,GL_UNSIGNED_BYTE,this->cWinImData ); } - } + } - // Affichage de l'overlay - if(cOverlay && cValidOverlayData && cViewOverlayData) - { + // Affichage de l'overlay de la classe #C1 + if(cOverlay && cValidOverlayData && cViewOverlayData && cViewOverlayClassFirst) + { glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glDrawPixels(this->cWinDataSizeX, this->cWinDataSizeY, GL_RGBA, - GL_UNSIGNED_BYTE, this->cWinOverlayData); - glDisable(GL_BLEND); - } + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glDrawPixels(this->cWinDataSizeX, this->cWinDataSizeY, GL_RGBA, + GL_UNSIGNED_BYTE, this->cWinOverlayDataFirst); + glDisable(GL_BLEND); + } + + // Affichage de l'overlay de la classe #C2 + if(cOverlay && cValidOverlayData && cViewOverlayData && cViewOverlayClassSecond) + { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glDrawPixels(this->cWinDataSizeX, this->cWinDataSizeY, GL_RGBA, + GL_UNSIGNED_BYTE, this->cWinOverlayDataSecond); + glDisable(GL_BLEND); + } // Selection Box display if (this->cSelectRectangle) @@ -775,12 +803,11 @@ ViewClickedPoints() template <class TPixel, class TPixelOverlay> void GLVectorImageViewClick<TPixel, TPixelOverlay> -::SetInputOverlay( OverlayPointer newOverlayData, - OverlayPointer newOverlayDataClassRed, - OverlayPointer newOverlayDataClassBlue) +::SetInputOverlay( OverlayPointer newOverlayDataClassFirst, + OverlayPointer newOverlayDataClassSecond) { RegionType newoverlay_region = - newOverlayData->GetLargestPossibleRegion(); + newOverlayDataClassFirst->GetLargestPossibleRegion(); SizeType newoverlay_size = newoverlay_region.GetSize(); @@ -789,22 +816,28 @@ GLVectorImageViewClick<TPixel, TPixelOverlay> && (newoverlay_size[1] == this->cDimSize[1]) ) { - this->cOverlayData = newOverlayData; - this->cOverlayDataClassRed = newOverlayDataClassRed; - this->cOverlayDataClassBlue = newOverlayDataClassBlue; + // this->cOverlayData = newOverlayData; + this->cOverlayDataClassFirst = newOverlayDataClassFirst; + this->cOverlayDataClassSecond = newOverlayDataClassSecond; - //this->cViewOverlayData = true; + this->cOverlay=true; + this->cViewOverlayData = true; this->cValidOverlayData = true; this->cOverlayOpacity = (float)0.0; - if(this->cWinOverlayData != NULL) + if(this->cWinOverlayDataFirst != NULL) { - delete [] this->cWinOverlayData; + delete [] this->cWinOverlayDataFirst; + } + if(this->cWinOverlayDataSecond != NULL) + { + delete [] this->cWinOverlayDataSecond; } const unsigned long bufferSize = this->cWinDataSizeX * this->cWinDataSizeY * 4; - this->cWinOverlayData = new unsigned char[ bufferSize ]; + this->cWinOverlayDataFirst = new unsigned char[ bufferSize ]; + this->cWinOverlayDataSecond = new unsigned char[ bufferSize ]; } else // return a warning { @@ -844,19 +877,20 @@ GLVectorImageViewClick<TPixel, TPixelOverlay> template <class TPixel, class TPixelOverlay> const typename GLVectorImageViewClick<TPixel, TPixelOverlay>::OverlayPointer & - GLVectorImageViewClick<TPixel, TPixelOverlay>::GetInputOverlayClassRed( void ) + GLVectorImageViewClick<TPixel, TPixelOverlay>::GetInputOverlayClassFirst( void ) const { - return this->cOverlayDataClassRed; + return this->cOverlayDataClassFirst; } + template <class TPixel, class TPixelOverlay> const typename GLVectorImageViewClick<TPixel, TPixelOverlay>::OverlayPointer & - GLVectorImageViewClick<TPixel, TPixelOverlay>::GetInputOverlayClassBlue( void ) + GLVectorImageViewClick<TPixel, TPixelOverlay>::GetInputOverlayClassSecond( void ) const { - return this->cOverlayDataClassBlue; + return this->cOverlayDataClassSecond; } template <class TPixel, class TPixelOverlay> @@ -1194,11 +1228,18 @@ void GLVectorImageViewClick<TPixel,TPixelOverlay>::boxMax(float x, float y, floa template <class TPixel, class TPixelOverlay> void GLVectorImageViewClick<TPixel, TPixelOverlay>:: -ActivateOverlay(bool b) +ActivateOverlayFirst(bool b) { - cOverlay = b ; + cViewOverlayClassFirst = b ; +} + +template <class TPixel, class TPixelOverlay> +void +GLVectorImageViewClick<TPixel, TPixelOverlay>:: +ActivateOverlaySecond(bool b) +{ + cViewOverlayClassSecond = b ; } - diff --git a/Code/Visu/otbImageViewerAS.h b/Code/Visu/otbImageViewerAS.h index 97d755600c850a6e2147dfc09f56cdd09fa9c9e4..71c1eabebd0c26137778820bff2cf16cbfcfb6a2 100755 --- a/Code/Visu/otbImageViewerAS.h +++ b/Code/Visu/otbImageViewerAS.h @@ -103,8 +103,8 @@ public: /** Gestion des �v�nements associ�s aux bouttons */ void EraseLastClickedPoint(); void EraseAllClickedPoints(); - void LearnAlgorythm(); - void ClassificationAlgorythm(); + void LearnAlgorithm(); + void ClassificationAlgorithm(); void DisplayFirstClass(); void DisplaySecondClass(); void LoadLeftImage(); diff --git a/Code/Visu/otbImageViewerAS.txx b/Code/Visu/otbImageViewerAS.txx index f8a6566f00d4a62d909fa5a260718ad444d0174e..50fa04e470d4cd9fc34e6b30532c5dc11d600bfc 100755 --- a/Code/Visu/otbImageViewerAS.txx +++ b/Code/Visu/otbImageViewerAS.txx @@ -442,31 +442,36 @@ ImageViewerAS<TPixel>::EraseAllClickedPoints() template <class TPixel> void -ImageViewerAS<TPixel>::LearnAlgorythm() +ImageViewerAS<TPixel>::LearnAlgorithm() { m_PrincipalViewBeforeClassif->LearnStep(); } template <class TPixel> void -ImageViewerAS<TPixel>::ClassificationAlgorythm() +ImageViewerAS<TPixel>::ClassificationAlgorithm() { m_PrincipalViewBeforeClassif->ClassificationStep(); + m_PrincipalViewAfterClassif->SetInputOverlay(m_PrincipalViewBeforeClassif->GetInputOverlayClassFirst(), + m_PrincipalViewBeforeClassif->GetInputOverlayClassSecond()); } template <class TPixel> void ImageViewerAS<TPixel>::DisplayFirstClass() { - m_PrincipalViewAfterClassif->ActivateOverlay(true); + m_PrincipalViewAfterClassif->ActivateOverlayFirst(true); + m_PrincipalViewAfterClassif->ActivateOverlaySecond(false); this->Update(); } + template <class TPixel> void ImageViewerAS<TPixel>::DisplaySecondClass() { - m_PrincipalViewAfterClassif->ActivateOverlay(false); + m_PrincipalViewAfterClassif->ActivateOverlayFirst(false); + m_PrincipalViewAfterClassif->ActivateOverlaySecond(true); this->Update(); } diff --git a/Code/Visu/otbImageViewerASGUI.fl b/Code/Visu/otbImageViewerASGUI.fl index 476c5a7601faef5d018ab1e7b7c1e37f9d9352b7..9325b7dc2a75c9fb06e1d7206f9c2d9312e57d32 100755 --- a/Code/Visu/otbImageViewerASGUI.fl +++ b/Code/Visu/otbImageViewerASGUI.fl @@ -13,7 +13,7 @@ class otbImageViewerASGUI {open label {Principal Window} open xywh {469 33 710 575} type Double box PLASTIC_DOWN_BOX color 196 labelsize 12 align 33 visible } { - Fl_Group glWindowGroupPrincipal {open selected + Fl_Group glWindowGroupPrincipal {open xywh {-5 -5 715 580} color 40 } { Fl_Button bUndo { @@ -23,12 +23,12 @@ class otbImageViewerASGUI {open } Fl_Button bLearn { label Learn - callback {LearnAlgorythm();} + callback {LearnAlgorithm();} xywh {215 420 64 25} box SHADOW_BOX color 55 labelfont 1 labelcolor 176 } Fl_Button bClassif { label Classif - callback {ClassificationAlgorythm();} + callback {ClassificationAlgorithm();} selected xywh {215 450 64 25} box SHADOW_BOX color 55 labelfont 1 labelcolor 176 } Fl_Button bReset { @@ -109,9 +109,9 @@ class otbImageViewerASGUI {open } {} Function {EraseAllClickedPoints()} {return_type {virtual void} } {} - Function {LearnAlgorythm()} {return_type {virtual void} + Function {LearnAlgorithm()} {return_type {virtual void} } {} - Function {ClassificationAlgorythm()} {return_type {virtual void} + Function {ClassificationAlgorithm()} {return_type {virtual void} } {} Function {DisplaySecondClass()} {return_type {virtual void} } {} diff --git a/Code/Visu/otbPrincipalImageViewAS.txx b/Code/Visu/otbPrincipalImageViewAS.txx index 455a3d4a8340c6235bd4f92dde2f2650e6cbd673..7d5e16808a68b8b1af781b5f3f0d1f75b4c5a5fd 100755 --- a/Code/Visu/otbPrincipalImageViewAS.txx +++ b/Code/Visu/otbPrincipalImageViewAS.txx @@ -474,8 +474,8 @@ PrincipalImageViewAS<TPixel, TPixelOverlay>::ClassificationStep() typedef otb::Image< TPixelOverlay, Dimension > OutputImageType; typename OutputImageType::Pointer outputImage = OutputImageType::New(); - typename OutputImageType::Pointer ImageClassBlue = OutputImageType::New(); - typename OutputImageType::Pointer ImageClassRed = OutputImageType::New(); + typename OutputImageType::Pointer ImageClassFirst = OutputImageType::New(); + typename OutputImageType::Pointer ImageClassSecond = OutputImageType::New(); typedef itk::Index<Dimension> myIndexType; typedef itk::Size<Dimension> mySizeType; @@ -496,23 +496,23 @@ PrincipalImageViewAS<TPixel, TPixelOverlay>::ClassificationStep() outputImage->SetRegions( region ); outputImage->Allocate(); - ImageClassBlue->SetRegions( region ); - ImageClassBlue->Allocate(); + ImageClassFirst->SetRegions( region ); + ImageClassFirst->Allocate(); - ImageClassRed->SetRegions( region ); - ImageClassRed->Allocate(); + ImageClassSecond->SetRegions( region ); + ImageClassSecond->Allocate(); std::cout << "Image iterator" << std::endl; typedef itk::ImageRegionIterator< OutputImageType> OutputIteratorType; OutputIteratorType outIt( outputImage, outputImage->GetBufferedRegion() ); - OutputIteratorType classRedIt( ImageClassRed, outputImage->GetBufferedRegion() ); - OutputIteratorType classBlueIt( ImageClassBlue,outputImage->GetBufferedRegion() ); + OutputIteratorType classSecondIt( ImageClassSecond, outputImage->GetBufferedRegion() ); + OutputIteratorType classFirstIt( ImageClassFirst,outputImage->GetBufferedRegion() ); outIt.GoToBegin(); - classRedIt.GoToBegin(); - classBlueIt.GoToBegin(); + classSecondIt.GoToBegin(); + classFirstIt.GoToBegin(); TPixelOverlay MaxValue = static_cast<TPixelOverlay>(255); TPixelOverlay MinValue = static_cast<TPixelOverlay>(0); @@ -523,25 +523,25 @@ PrincipalImageViewAS<TPixel, TPixelOverlay>::ClassificationStep() ClassifierType::ClassLabelType label = m_iter.GetClassLabel(); if( label == -1 ) { - classBlueIt.Set(MaxValue); - classRedIt.Set(MinValue); + classFirstIt.Set(MaxValue); + classSecondIt.Set(MinValue); } if( label == 1 ) { - classBlueIt.Set(MinValue); - classRedIt.Set(MaxValue); + classFirstIt.Set(MinValue); + classSecondIt.Set(MaxValue); } outIt.Set(m_iter.GetClassLabel()); ++m_iter ; ++outIt; - ++classRedIt; - ++classBlueIt; + ++classSecondIt; + ++classFirstIt; } // cOverlayData .... - this->SetInputOverlay(outputImage,ImageClassRed, ImageClassBlue ); + this->SetInputOverlay(ImageClassFirst, ImageClassSecond ); //ViewOverlayData(true); std::cout << "End Classif" << std::endl; @@ -549,6 +549,7 @@ std::cout << "End Classif" << std::endl; } + template <class TPixel, class TPixelOverlay> void PrincipalImageViewAS<TPixel, TPixelOverlay>::SetClickable(bool b)