本文整理汇总了C++中TImage::GetNumberOfComponentsPerPixel方法的典型用法代码示例。如果您正苦于以下问题:C++ TImage::GetNumberOfComponentsPerPixel方法的具体用法?C++ TImage::GetNumberOfComponentsPerPixel怎么用?C++ TImage::GetNumberOfComponentsPerPixel使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TImage
的用法示例。
在下文中一共展示了TImage::GetNumberOfComponentsPerPixel方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: initialize_vertex
void initialize_vertex(VertexDescriptorType v, TGraph& g) const
{
//std::cout << "Initializing " << v[0] << " " << v[1] << std::endl;
// Create the patch object and associate with the node
itk::Index<2> index;
index[0] = v[0];
index[1] = v[1];
itk::ImageRegion<2> region = ITKHelpers::GetRegionInRadiusAroundPixel(index, HalfWidth);
unsigned int numberOfValues = Image->GetNumberOfComponentsPerPixel() * region.GetNumberOfPixels();
if(MaskImage->IsValid(region))
{
std::vector<float> pixels(numberOfValues, 0);
itk::ImageRegionIterator<TImage> imageIterator(Image, region);
unsigned int pixelCounter = 0;
while(!imageIterator.IsAtEnd())
{
TImage::PixelType p = imageIterator.Get();
for(unsigned int component = 0; component < p.Size(); ++component)
{
pixels[Image->GetNumberOfComponentsPerPixel() * pixelCounter + component] = p[component];
}
pixelCounter++;
++imageIterator;
}
FeatureVectorPixelDescriptor descriptor(this->image, this->mask, region);
descriptor.SetVertex(v);
put(DescriptorMap, v, descriptor);
}
else
{
FeatureVectorPixelDescriptor descriptor(numberOfValues);
descriptor.SetVertex(v);
put(DescriptorMap, v, descriptor);
}
};
示例2: FinishVertex
void FinishVertex(VertexDescriptorType target, VertexDescriptorType sourceNode)
{
//OutputHelpers::WriteImage(MaskImage, Helpers::GetSequentialFileName("mask", this->NumberOfFinishedVertices, "png"));
ITKHelpers::WriteImage(MaskImage, Helpers::GetSequentialFileName("mask",
this->NumberOfFinishedVertices, "mha"));
//OutputHelpers::WriteVectorImageAsRGB(Image, Helpers::GetSequentialFileName("output", this->NumberOfFinishedVertices, "png"));
ITKHelpers::WriteImage(Image, Helpers::GetSequentialFileName("output",
this->NumberOfFinishedVertices, "mha"));
ITKHelpers::WriteRGBImage(Image, Helpers::GetSequentialFileName("output",
this->NumberOfFinishedVertices, "png"));
typename TImage::PixelType holeColor;
holeColor.SetSize(Image->GetNumberOfComponentsPerPixel());
holeColor[0] = 255;
holeColor[1] = 0;
holeColor[2] = 0;
MaskOperations::WriteMaskedRegionPNG(Image, MaskImage, Image->GetLargestPossibleRegion(), Helpers::GetSequentialFileName("maskedOutput", this->NumberOfFinishedVertices, "png"),
holeColor);
typedef itk::Image<unsigned char, 2> IndicatorImageType;
IndicatorImageType::Pointer boundaryStatusMapImage = IndicatorImageType::New();
boundaryStatusMapImage->SetRegions(Image->GetLargestPossibleRegion());
boundaryStatusMapImage->Allocate();
// BoostHelpers::WritePropertyMapAsImage(BoundaryStatusMap, boundaryStatusMapImage.GetPointer(),
// Helpers::GetSequentialFileName("boundaryStatusMap",
// this->NumberOfFinishedVertices, "png"));
IndicatorImageType::Pointer validBoundaryNodeImage = IndicatorImageType::New();
validBoundaryNodeImage->SetRegions(Image->GetLargestPossibleRegion());
validBoundaryNodeImage->Allocate();
// BoostHelpers::WriteValidQueueNodesAsImage(BoundaryNodeQueue, BoundaryStatusMap,
// validBoundaryNodeImage.GetPointer(),
// Helpers::GetSequentialFileName("boundaryQueueValidNodes",
// this->NumberOfFinishedVertices, "png"));
IndicatorImageType::Pointer allBoundaryNodeImage = IndicatorImageType::New();
allBoundaryNodeImage->SetRegions(Image->GetLargestPossibleRegion());
allBoundaryNodeImage->Allocate();
// BoostHelpers::WriteAllQueueNodesAsImage(BoundaryNodeQueue, allBoundaryNodeImage.GetPointer(),
// Helpers::GetSequentialFileName("boundaryQueueAllNodes",
// this->NumberOfFinishedVertices, "png"));
this->NumberOfFinishedVertices++;
// std::cout << "Finished node " << this->NumberOfFinishedVertices << std::endl;
}
示例3: PotentialMatchMade
void PotentialMatchMade(VertexDescriptorType targetNode, VertexDescriptorType sourceNode)
{
std::cout << "Match made: target: " << targetNode[0] << " " << targetNode[1]
<< " with source: " << sourceNode[0] << " " << sourceNode[1] << std::endl;
std::cout << "Writing pair " << NumberOfFinishedVertices << std::endl;
{
itk::Index<2> sourceIndex = ITKHelpers::CreateIndex(sourceNode);
itk::ImageRegion<2> sourceRegion = ITKHelpers::GetRegionInRadiusAroundPixel(sourceIndex, this->HalfWidth);
ITKHelpers::WriteVectorImageRegionAsRGB(Image, sourceRegion,
Helpers::GetSequentialFileName("sourcePatch",
this->NumberOfFinishedVertices, "png"));
}
{
// Construct the region around the vertex
itk::Index<2> indexToFinish = ITKHelpers::CreateIndex(targetNode);
itk::ImageRegion<2> region = ITKHelpers::GetRegionInRadiusAroundPixel(indexToFinish, this->HalfWidth);
ITKHelpers::WriteVectorImageRegionAsRGB(Image, region,
Helpers::GetSequentialFileName("targetPatch",
this->NumberOfFinishedVertices, "png"));
ITKHelpers::WriteRegionAsRGBImage(this->MaskImage, region,
Helpers::GetSequentialFileName("maskPatch", this->NumberOfFinishedVertices, "png"));
typename TImage::PixelType holeColor;
holeColor.SetSize(Image->GetNumberOfComponentsPerPixel());
holeColor[0] = 255;
holeColor[1] = 0;
holeColor[2] = 0;
MaskOperations::WriteMaskedRegionPNG(this->Image, this->MaskImage, region,
Helpers::GetSequentialFileName("maskedTargetPatch", this->NumberOfFinishedVertices, "png"),
holeColor);
}
}
示例4: AcceptMatch
bool AcceptMatch(VertexDescriptorType target, VertexDescriptorType source, float& computedEnergy) const
{
itk::Index<2> targetPixel = ITKHelpers::CreateIndex(target);
itk::ImageRegion<2> targetRegion = ITKHelpers::GetRegionInRadiusAroundPixel(targetPixel, HalfWidth);
itk::Index<2> sourcePixel = ITKHelpers::CreateIndex(source);
itk::ImageRegion<2> sourceRegion = ITKHelpers::GetRegionInRadiusAroundPixel(sourcePixel, HalfWidth);
// Get the pixels to use in the target region
std::vector<typename TImage::PixelType> validPixelsTargetRegion =
MaskOperations::GetValidPixelsInRegion(Image, MaskImage, targetRegion);
// Get the pixels to use in the source region
std::vector<itk::Offset<2> > validOffsets = MaskImage->GetValidOffsetsInRegion(targetRegion);
std::vector<itk::Index<2> > sourcePatchValidPixelIndices =
ITKHelpers::OffsetsToIndices(validOffsets, sourceRegion.GetIndex());
std::vector<typename TImage::PixelType> validPixelsSourceRegion =
ITKHelpers::GetPixelValues(Image, sourcePatchValidPixelIndices);
assert(validPixelsSourceRegion.size() == validPixelsTargetRegion.size());
unsigned int numberOfPixels = validPixelsTargetRegion.size();
float totalHistogramDifference = 0.0f;
for(unsigned int component = 0; component < Image->GetNumberOfComponentsPerPixel(); ++component)
{
std::vector<float> targetValues(numberOfPixels);
std::vector<float> sourceValues(numberOfPixels);
for(unsigned int pixelId = 0; pixelId < numberOfPixels; ++pixelId)
{
targetValues[pixelId] = validPixelsTargetRegion[pixelId][component];
sourceValues[pixelId] = validPixelsSourceRegion[pixelId][component];
}
float minTargetValue = *(std::min_element(targetValues.begin(), targetValues.end()));
float minSourceValue = *(std::min_element(sourceValues.begin(), sourceValues.end()));
float maxTargetValue = *(std::max_element(targetValues.begin(), targetValues.end()));
float maxSourceValue = *(std::max_element(sourceValues.begin(), sourceValues.end()));
float minValue = std::min(minTargetValue, minSourceValue);
float maxValue = std::max(maxTargetValue, maxSourceValue);
std::vector<float> targetHistogram = Histogram::ScalarHistogram(targetValues, 20,
minValue, maxValue);
std::vector<float> sourceHistogram = Histogram::ScalarHistogram(sourceValues, 20,
minValue, maxValue);
// We normalize the histograms because the magnitude of the histogram difference should not
// change based on the number of pixels that were in the valid region of the patches.
Helpers::NormalizeVector(targetHistogram);
Helpers::NormalizeVector(sourceHistogram);
float channelHistogramDifference = Helpers::VectorSumOfAbsoluteDifferences(targetHistogram, sourceHistogram);
totalHistogramDifference += channelHistogramDifference;
}
// Compute the difference
computedEnergy = totalHistogramDifference;
std::cout << "HistogramDifferenceAcceptanceVisitor Energy: " << computedEnergy << std::endl;
if(computedEnergy < DifferenceThreshold)
{
std::cout << "HistogramDifferenceAcceptanceVisitor: Match accepted (less than " << DifferenceThreshold
<< ")" << std::endl;
return true;
}
else
{
std::cout << "HistogramDifferenceAcceptanceVisitor: Match rejected (greater than " << DifferenceThreshold
<< ")" << std::endl;
return false;
}
};
示例5: AcceptMatch
bool AcceptMatch(VertexDescriptorType target, VertexDescriptorType source, float& computedEnergy) const
{
itk::Index<2> targetPixel = ITKHelpers::CreateIndex(target);
itk::ImageRegion<2> targetRegion = ITKHelpers::GetRegionInRadiusAroundPixel(targetPixel, HalfWidth);
itk::Index<2> sourcePixel = ITKHelpers::CreateIndex(source);
itk::ImageRegion<2> sourceRegion = ITKHelpers::GetRegionInRadiusAroundPixel(sourcePixel, HalfWidth);
// Compute the average of the valid pixels in the target region
std::vector<typename TImage::PixelType> targetRegionPixels = MaskOperations::GetValidPixelsInRegion(Image, MaskImage, targetRegion);
// The next line is the only thing that changed versus HistogramDifferenceAcceptanceVisitor
std::vector<itk::Offset<2> > targetRegionHoleOffsets = MaskImage->GetHoleOffsetsInRegion(targetRegion);
std::vector<itk::Index<2> > sourcePatchPixelIndices = ITKHelpers::OffsetsToIndices(targetRegionHoleOffsets, sourceRegion.GetIndex());
std::vector<typename TImage::PixelType> sourceRegionPixels = ITKHelpers::GetPixelValues(Image, sourcePatchPixelIndices);
assert(sourceRegionPixels.size() == targetRegionPixels.size());
float totalHistogramDifference = 0.0f;
for(unsigned int component = 0; component < Image->GetNumberOfComponentsPerPixel(); ++component)
{
std::vector<float> targetValues(targetRegionPixels.size());
std::vector<float> sourceValues(sourceRegionPixels.size());
for(unsigned int pixelId = 0; pixelId < targetRegionPixels.size(); ++pixelId)
{
targetValues[pixelId] = targetRegionPixels[pixelId][component];
}
for(unsigned int pixelId = 0; pixelId < sourceRegionPixels.size(); ++pixelId)
{
sourceValues[pixelId] = sourceRegionPixels[pixelId][component];
}
std::vector<float> targetHistogram = Histogram<int>::ScalarHistogram(targetValues, 20, Mins[component], Maxs[component]);
std::vector<float> sourceHistogram = Histogram<int>::ScalarHistogram(sourceValues, 20, Mins[component], Maxs[component]);
// We normalize the histograms because the magnitude of the histogram difference should not change based on the number of pixels that were in the valid region of the patches.
Helpers::NormalizeVector(targetHistogram);
Helpers::NormalizeVector(sourceHistogram);
float channelHistogramDifference = Helpers::VectorSumOfAbsoluteDifferences(targetHistogram, sourceHistogram);
totalHistogramDifference += channelHistogramDifference;
}
// Compute the difference
computedEnergy = totalHistogramDifference;
std::cout << "HoleHistogramDifferenceAcceptanceVisitor Energy: " << computedEnergy << std::endl;
if(computedEnergy < DifferenceThreshold)
{
std::cout << "HoleHistogramDifferenceAcceptanceVisitor: Match accepted (less than " << DifferenceThreshold << ")" << std::endl;
return true;
}
else
{
std::cout << "HoleHistogramDifferenceAcceptanceVisitor: Match rejected (greater than " << DifferenceThreshold << ")" << std::endl;
return false;
}
};