Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
git-svn-id: svn+ssh://orchestra.med.harvard.edu/svn/megason/Code/GoFi…
…gure2@1075 ef826fda-c0ae-4237-af8e-f8dcbcf7929c
- Loading branch information
1 parent
1b0a87c
commit 5bcb90a
Showing
6 changed files
with
2,486 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
ADD_EXECUTABLE( lsm2jpg | ||
lsm2jpg.cxx | ||
vtkLSMReader.cxx | ||
) | ||
TARGET_LINK_LIBRARIES( lsm2jpg | ||
vtkIO | ||
vtkImaging | ||
) | ||
|
||
ADD_EXECUTABLE( lsm2mha | ||
lsm2mha.cxx | ||
vtkLSMReader.cxx | ||
) | ||
TARGET_LINK_LIBRARIES( lsm2mha | ||
vtkIO | ||
vtkImaging | ||
) | ||
|
||
ADD_EXECUTABLE( lsmColorVizu | ||
lsmColorVizu.cxx | ||
vtkLSMReader.cxx | ||
) | ||
TARGET_LINK_LIBRARIES( lsmColorVizu | ||
vtkIO | ||
vtkImaging | ||
vtkRendering | ||
vtkRenderingAddOn2 | ||
) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,148 @@ | ||
#include "vtkLSMReader.h" | ||
#include <iostream> | ||
#include <sstream> | ||
#include "vtkJPEGWriter.h" | ||
#include "vtkImageAppendComponents.h" | ||
#include "vtkIndent.h" | ||
#include "vtkImageData.h" | ||
|
||
int main(int argc,char* argv[]) | ||
{ | ||
if (argc<3 || argc>4) | ||
{ | ||
std::cout << "Usage: "; | ||
std::cout << "(exe) FileName IsChannelToBeBlended"; | ||
std::cout << std::endl; | ||
return 0; | ||
} | ||
|
||
if( !( atoi(argv[2]) == 0 || atoi(argv[2]) == 1 ) ) | ||
{ | ||
std::cout << "Second argument must be either 0 or 1." << std::endl; | ||
return 0; | ||
} | ||
|
||
//read the LSM file: | ||
vtkLSMReader* reader=vtkLSMReader::New(); | ||
reader->SetFileName(argv[1]); | ||
reader->Update(); | ||
|
||
int NumberOfTimePoints = reader->GetNumberOfTimePoints(); | ||
int NumberOfChannels = reader->GetNumberOfChannels(); | ||
|
||
reader->PrintSelf(std::cout, vtkIndent(0)); | ||
|
||
vtkJPEGWriter * writer = vtkJPEGWriter::New(); | ||
writer->SetFileDimensionality( 2 ); | ||
|
||
for( int timePoint = 0;timePoint < NumberOfTimePoints; timePoint++) | ||
{ | ||
if( atoi(argv[2]) == 0 || NumberOfChannels == 1 ) | ||
{ | ||
for( int channel = 0; channel < NumberOfChannels; channel++) | ||
{ | ||
vtkLSMReader* treader=vtkLSMReader::New(); | ||
treader->SetFileName(argv[1]); | ||
treader->SetUpdateTimePoint( timePoint ); | ||
treader->SetUpdateChannel( channel ); | ||
treader->Update(); | ||
|
||
std::stringstream namebuffer; | ||
namebuffer << argv[1]; | ||
namebuffer << "_T_" << timePoint; | ||
namebuffer << "_Ch_" << channel; | ||
std::cout << namebuffer.str(); | ||
namebuffer << "_Z_ "; | ||
writer->SetFilePrefix(namebuffer.str().c_str()); | ||
writer->SetInputConnection( treader->GetOutputPort( ) ); | ||
writer->SetFilePattern( "%s%d.jpg"); | ||
writer->Write(); | ||
} | ||
} | ||
else | ||
{ | ||
// read the first channel, then Append other channel as components | ||
// of myImage. Finally, write it. | ||
// note that jpgwriter only handles 1 or 3 comp images. | ||
// if only one channel, no compositing | ||
// if two channel, compose with a dummy (empty) third channel | ||
// if three channels, no problem | ||
// if more than three channel, we should blend (TBD) | ||
if( NumberOfChannels < 4 ) | ||
{ | ||
vtkImageData* myImage_ch1; | ||
vtkImageData* myImage_ch2; | ||
vtkImageData* myImage_ch3; | ||
|
||
{ | ||
vtkLSMReader* treader=vtkLSMReader::New(); | ||
treader->SetFileName(argv[1]); | ||
treader->SetUpdateTimePoint( timePoint ); | ||
treader->SetUpdateChannel( 0 ); | ||
treader->Update(); | ||
myImage_ch1 = treader->GetOutput(); | ||
} | ||
|
||
{ | ||
vtkLSMReader* treader=vtkLSMReader::New(); | ||
treader->SetFileName(argv[1]); | ||
treader->SetUpdateTimePoint( timePoint ); | ||
treader->SetUpdateChannel( 1 ); | ||
treader->Update(); | ||
myImage_ch2 = treader->GetOutput(); | ||
} | ||
|
||
{ | ||
vtkLSMReader* treader=vtkLSMReader::New(); | ||
treader->SetFileName(argv[1]); | ||
treader->SetUpdateTimePoint( timePoint ); | ||
treader->SetUpdateChannel( 2 ); | ||
treader->Update(); | ||
std::cout << "Third reader done." << std::endl; | ||
int * dimensions = treader->GetDimensions(); | ||
int flatindex = dimensions[0] * dimensions[1] * dimensions[2]; | ||
myImage_ch3 = treader->GetOutput(); | ||
if( NumberOfChannels == 2 ) // dummy third channel | ||
{ | ||
// here we suppose the type to be char | ||
// to be improved | ||
char *ptr = (char*)( myImage_ch3->GetScalarPointer()); | ||
for( int k=0; k < flatindex; k++ ) | ||
{ | ||
*ptr++ = 0; | ||
} | ||
} | ||
std::cout << "third channel ready." << std::endl; | ||
} | ||
|
||
vtkImageAppendComponents* appendFilter1 = vtkImageAppendComponents::New(); | ||
appendFilter1->AddInput( myImage_ch1 ); | ||
appendFilter1->AddInput( myImage_ch2 ); | ||
appendFilter1->Update(); | ||
std::cout << "Two first channel composed." << std::endl; | ||
|
||
vtkImageAppendComponents* appendFilter2 = vtkImageAppendComponents::New(); | ||
appendFilter2->AddInput( appendFilter1->GetOutput() ); | ||
appendFilter2->AddInput( myImage_ch3 ); | ||
appendFilter2->Update(); | ||
std::cout << "Third channel composed." << std::endl; | ||
|
||
std::stringstream namebuffer; | ||
namebuffer << argv[1]; | ||
namebuffer << "_T_" << timePoint; | ||
std::cout << namebuffer.str(); | ||
namebuffer << "_Z_ "; | ||
writer->SetFilePrefix(namebuffer.str().c_str()); | ||
writer->SetInput( appendFilter2->GetOutput( ) ); | ||
writer->SetFilePattern( "%s%d.jpg"); | ||
writer->Write(); | ||
} | ||
else | ||
{ | ||
// num of channel > 3 | ||
// TBD | ||
} | ||
} | ||
} | ||
return 1; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
#include "vtkLSMReader.h" | ||
#include <iostream> | ||
#include <sstream> | ||
#include "vtkMetaImageWriter.h" | ||
#include "vtkImageAppendComponents.h" | ||
#include "vtkIndent.h" | ||
#include "vtkImageData.h" | ||
|
||
int main(int argc,char* argv[]) | ||
{ | ||
if (argc != 2) | ||
{ | ||
std::cout << "Usage: "; | ||
std::cout << "(exe) FileName"; | ||
std::cout << std::endl; | ||
return 0; | ||
} | ||
|
||
//read the LSM file: | ||
vtkLSMReader* reader=vtkLSMReader::New(); | ||
reader->SetFileName(argv[1]); | ||
reader->Update(); | ||
|
||
int NumberOfTimePoints = reader->GetNumberOfTimePoints(); | ||
int NumberOfChannels = reader->GetNumberOfChannels(); | ||
|
||
vtkMetaImageWriter * writer = vtkMetaImageWriter::New(); | ||
writer->SetFileDimensionality( 3 ); | ||
|
||
for( int timePoint = 0;timePoint < NumberOfTimePoints; timePoint++) | ||
{ | ||
for( int channel = 0; channel < NumberOfChannels; channel++) | ||
{ | ||
vtkLSMReader* treader=vtkLSMReader::New(); | ||
treader->SetFileName(argv[1]); | ||
treader->SetUpdateTimePoint( timePoint ); | ||
treader->SetUpdateChannel( channel ); | ||
treader->Update(); | ||
|
||
std::stringstream namebuffer; | ||
namebuffer << argv[1]; | ||
namebuffer << "_T_" << timePoint; | ||
namebuffer << "_Ch_" << channel; | ||
namebuffer << ".mha"; | ||
|
||
std::cout << namebuffer.str() << std::endl;; | ||
|
||
writer->SetFileName( namebuffer.str().c_str() ); | ||
writer->SetInputConnection( treader->GetOutputPort( ) ); | ||
writer->Write(); | ||
} | ||
} | ||
return EXIT_SUCCESS; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
#include "vtkLSMReader.h" | ||
#include "vtkImageAppendComponents.h" | ||
#include "vtkImageViewer2.h" | ||
#include "vtkIndent.h" | ||
#include "vtkImageData.h" | ||
#include "vtkViewImage.h" | ||
#include "vtkViewColorImage.h" | ||
|
||
int main(int argc,char* argv[]) | ||
{ | ||
if (argc != 2) | ||
{ | ||
std::cout << "Usage: "; | ||
std::cout << "(exe) FileName"; | ||
std::cout << std::endl; | ||
return 0; | ||
} | ||
|
||
//read the LSM file: | ||
vtkLSMReader* reader=vtkLSMReader::New(); | ||
reader->SetFileName(argv[1]); | ||
reader->Update(); | ||
|
||
int NumberOfTimePoints = reader->GetNumberOfTimePoints(); | ||
int NumberOfChannels = reader->GetNumberOfChannels(); | ||
|
||
for( int timePoint = 0;timePoint < NumberOfTimePoints; timePoint++) | ||
{ | ||
{ | ||
{ | ||
vtkImageData* myImage_ch1; | ||
vtkImageData* myImage_ch2; | ||
vtkImageData* myImage_ch3; | ||
|
||
myImage_ch1 = reader->GetOutput(); | ||
|
||
{ | ||
vtkLSMReader* treader=vtkLSMReader::New(); | ||
treader->SetFileName(argv[1]); | ||
treader->SetUpdateTimePoint( timePoint ); | ||
treader->SetUpdateChannel( 1 ); | ||
treader->Update(); | ||
int * dimensions = treader->GetDimensions(); | ||
int flatindex = dimensions[0] * dimensions[1] * dimensions[2]; | ||
myImage_ch2 = treader->GetOutput(); | ||
if( NumberOfChannels == 1 ) | ||
{ | ||
char *ptr = (char*)( myImage_ch2->GetScalarPointer()); | ||
for( int k=0; k < flatindex; k++ ) | ||
{ | ||
*ptr++ = 0; | ||
} | ||
} | ||
} | ||
|
||
{ | ||
vtkLSMReader* treader=vtkLSMReader::New(); | ||
treader->SetFileName(argv[1]); | ||
treader->SetUpdateTimePoint( timePoint ); | ||
treader->SetUpdateChannel( 2 ); | ||
treader->Update(); | ||
int * dimensions = treader->GetDimensions(); | ||
int flatindex = dimensions[0] * dimensions[1] * dimensions[2]; | ||
myImage_ch3 = treader->GetOutput(); | ||
if( NumberOfChannels == 2 ) // dummy third channel | ||
{ | ||
char *ptr = (char*)( myImage_ch3->GetScalarPointer()); | ||
for( int k=0; k < flatindex; k++ ) | ||
{ | ||
*ptr++ = 0; | ||
} | ||
} | ||
} | ||
|
||
vtkImageAppendComponents* appendFilter1 = vtkImageAppendComponents::New(); | ||
appendFilter1->AddInput( myImage_ch1 ); | ||
appendFilter1->AddInput( myImage_ch2 ); | ||
appendFilter1->Update(); | ||
|
||
vtkImageAppendComponents* appendFilter2 = vtkImageAppendComponents::New(); | ||
appendFilter2->AddInput( appendFilter1->GetOutput() ); | ||
appendFilter2->AddInput( myImage_ch3 ); | ||
appendFilter2->Update(); | ||
|
||
{ | ||
std::cout << "vtkImageViewer2.: << std::endl; | ||
vtkImageViewer2 * viewer = vtkImageViewer2::New(); | ||
viewer->SetInput( appendFilter2->GetOutput() ); | ||
viewer->Render(); | ||
char buffer; | ||
cin >> buffer; | ||
} | ||
{ | ||
std::cout << "vtkViewImage.: << std::endl; | ||
vtkViewImage * viewer = vtkViewImage::New(); | ||
viewer->SetInput( appendFilter2->GetOutput() ); | ||
viewer->Render(); | ||
char buffer; | ||
cin >> buffer; | ||
} | ||
{ | ||
std::cout << "vtkViewColorImage.: << std::endl; | ||
vtkViewColorImage * viewer = vtkViewColorImage::New(); | ||
viewer->SetInput( appendFilter2->GetOutput() ); | ||
viewer->Render(); | ||
char buffer; | ||
cin >> buffer; | ||
} | ||
} | ||
} | ||
} | ||
return 1; | ||
} |
Oops, something went wrong.