예제 #1
0
void ImageManager::removeImage(const std::string& imageID)
{
	std::map<std::string, sf::Image>::iterator imageIt(m_images.find(imageID));
	if(imageIt == m_images.end())
		return;
	m_images.erase(imageID);
}
예제 #2
0
void ImageManager::clearImages(void)
{
	for(std::map<std::string, sf::Image*>::iterator imageIt(m_images.begin()); imageIt != m_images.end(); imageIt++)
	{
		delete imageIt->second;
	}
	m_images.clear();
}
예제 #3
0
const sf::Image& ImageManager::getImage(const std::string& imageID) const
{
	std::map<std::string, sf::Image>::const_iterator imageIt(m_images.find(imageID));
	if(imageIt == m_images.end())
	{
		printf("IMAGE \"%s\" NOT FOUND\n", imageID.c_str());
		return m_images.at("IMAGENOTFOUND");
	}
		else
			return imageIt->second;
}
예제 #4
0
sf::Image& ImageManager::getImage(const std::string& imageID)
{
	std::map<std::string, sf::Image*>::iterator imageIt(m_images.find(imageID));
	if(imageIt == m_images.end())
	{
		printf("IMAGE \"%s\" NOT FOUND\n", imageID.c_str());
		return *s_ImageNotFound;
	}
		else
			return *(imageIt->second);
}
예제 #5
0
typename PatchExtractor<PValue>::ImageType::Pointer 
PatchExtractor<PValue>::ExtractPatch()
{
	ContIndexType startIndex;
	for(unsigned int i = 0; i < 2; i++)
	{
		startIndex[i] = m_Center[i] - (m_Size[i] / 2.0);
	}
	startIndex[2] = 0;

	PointType newOrigin;
	m_Image->TransformContinuousIndexToPhysicalPoint(startIndex, newOrigin);


	typename ImageType::Pointer patch = ImageType::New();
	patch->SetDirection(m_Image->GetDirection());
	patch->SetOrigin(newOrigin);
	patch->SetSpacing(m_Image->GetSpacing());
	
	typename ImageType::RegionType region;
	m_Size[2] = 1;
	region.SetSize(m_Size);
	
	patch->SetRegions(region);
	patch->Allocate();

	
	typedef itk::NearestNeighborInterpolateImageFunction<ImageType, double> InterpolatorType;
	typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
	interpolator->SetInputImage(m_Image);


	itk::ImageRegionIterator<ImageType> imageIt(patch, region);
	while(!imageIt.IsAtEnd())
	{
		typename ImageType::IndexType index = imageIt.GetIndex();
		PointType point;
		patch->TransformIndexToPhysicalPoint(index, point);

		if(interpolator->IsInsideBuffer(point))
			imageIt.Set(interpolator->Evaluate(point));
		else
			imageIt.Set(0);
		++imageIt;
	}

	return patch;
	
}
예제 #6
0
typename PatchExtractor<PValue>::MaskType::Pointer PatchExtractor<PValue>::ExtractMask()
{
	ContIndexType startIndex;
	for(unsigned int i = 0; i < 2; i++)
	{
		startIndex[i] = m_Center[i] - (m_Size[i] / 2.0);
	}
	startIndex[2] = 0;


	typename ImageType::IndexType properIndex;
	for(unsigned int i = 0; i < 3; i++)
	{
		properIndex[i] = round(startIndex[i]);
	}

	for(unsigned int i = 0; i < 2; i++)
	{
		if(properIndex[i] < 0) properIndex[i] = 0;
		if((m_Size[i] + properIndex[i]) > (m_Image->GetLargestPossibleRegion().GetSize()[i]-1))
		{
			m_Size[i] = m_Image->GetLargestPossibleRegion().GetSize()[i]-1-properIndex[i];
		}
	}
	
	MaskType::RegionType region;
	region.SetIndex(properIndex);
	m_Size[2] = 1;
	region.SetSize(m_Size);

	MaskType::Pointer mask = MaskType::New();
	mask->SetDirection(m_Image->GetDirection());
	mask->SetSpacing(m_Image->GetSpacing());
	mask->SetOrigin(m_Image->GetOrigin());
	mask->SetRegions(m_Image->GetLargestPossibleRegion());
	mask->Allocate();
	mask->FillBuffer(0);

	itk::ImageRegionIterator<MaskType> imageIt(mask, region);
	while(!imageIt.IsAtEnd())
	{
		imageIt.Set(m_MaskValue);
		++imageIt;
	}

	return mask;
}
예제 #7
0
void medDatabasePreview::onSeriesClicked(const medDataIndex& id)
{
    medAbstractDbController * db =  medDataManager::instance()->controllerForDataSource(id.dataSourceId());

    d->seriesGroup->clear();

    if ( db ) {
        QList<medDataIndex> series = db->series(id);
        for (QList<medDataIndex>::const_iterator seriesIt( series.begin() ); seriesIt != series.end(); ++seriesIt ) {

            d->seriesGroup->addItem(new medDatabasePreviewItem(
                                        medDataIndex::makeSeriesIndex((*seriesIt).dataSourceId(), (*seriesIt).patientId(), (*seriesIt).studyId(), (*seriesIt).seriesId()) ) );
        }
    }

    // Image level
    int firstImageId(-1);

    d->imageGroup->clear();

    if ( db ) {
        QList<medDataIndex> images = db->images(id);
        for (QList<medDataIndex>::const_iterator imageIt( images.begin() ); imageIt != images.end(); ++imageIt ) {

            if (firstImageId < 0)
                firstImageId = (*imageIt).imageId();

            d->imageGroup->addItem(new medDatabasePreviewItem( medDataIndex(*imageIt ) ) );
        }

    }

    d->scene->setSceneRect(d->imageGroup->boundingRect());

    if(!d->level)
        onSlideUp();
    else
        moveToItem( d->imageGroup->item(firstImageId) );
}
예제 #8
0
void mitk::VolumeCalculator::InternalCompute(itk::Image< TPixel, VImageDimension >* itkImage)
{
  itk::ImageRegionConstIterator<itk::Image < TPixel, VImageDimension > > imageIt(itkImage, itkImage->GetLargestPossibleRegion() );
  unsigned long int count = 0;

  for (imageIt.GoToBegin(); !imageIt.IsAtEnd(); ++imageIt)
  {
    if ( (int)(imageIt.Get()) >= m_Threshold )
    {
      count++;
    }
  }
  if (itkImage->GetLargestPossibleRegion().GetImageDimension() == 3) 
  {
    m_Volume = count / 1000.0 * itkImage->GetSpacing()[0] * itkImage->GetSpacing()[1] * itkImage->GetSpacing()[2];
  } 
  else if (itkImage->GetLargestPossibleRegion().GetImageDimension() == 2) 
  {
    m_Volume = count / 100.0 * itkImage->GetSpacing()[0] * itkImage->GetSpacing()[1];
  }
  m_VoxelCount = count;
}