颜色提取
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkConnectedComponentImageFilter.h"
#include "itkLabelToRGBImageFilter.h"
#include "itksys/SystemTools.hxx"
#include <sstream>
#include "itkImageToVTKImageFilter.h"
#include "vtkImageViewer.h"
#include "vtkWin32RenderWindowInteractor.h"
#include "itkImageFileWriter.h"
#include <iostream>
#include <string>
using namespace std;
#include "itkRGBToLuminanceImageFilter.h"
#include "itkBinaryThresholdImageFilter.h"
#include "itkHoughTransform2DCirclesImageFilter.h"
#include "itkLabelOverlayImageFilter.h"
#include <list>
#include "itkCastImageFilter.h"
#include "vnl/vnl_math.h"
int main( int argc, char *argv[])
{
const unsigned int Dimension = 2;
typedef unsigned char PixelType;
typedef itk::RGBPixel<unsigned char> RGBPixelType;
typedef itk::Image<PixelType, Dimension> ImageType;
typedef itk::Image<RGBPixelType, Dimension> RGBImageType;
std::string bmp = ".bmp";
ImageType::Pointer image;
typedef itk::ImageFileReader<ImageType> ReaderType;
for (int num= 0;num<214;num++)
{
std::string inputFilename = "D:\\se6\\bmp7\\IM";
std::string outputFilename = "D:\\se6\\bmp8\\IM";
char t[256];
string s;
sprintf(t, "%d", num);
s = t;
inputFilename = inputFilename + s + bmp;
outputFilename = outputFilename + s + bmp;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(inputFilename);
reader->Update();
image = reader->GetOutput();
typedef itk::Image< unsigned short, Dimension > OutputImageType;
typedef itk::ConnectedComponentImageFilter <ImageType, OutputImageType >
ConnectedComponentImageFilterType;
ConnectedComponentImageFilterType::Pointer connected =
ConnectedComponentImageFilterType::New ();
connected->SetInput(image);
connected->Update();
std::cout << "Number of objects: " << connected->GetObjectCount() << std::endl;
typedef itk::LabelToRGBImageFilter<OutputImageType, RGBImageType> RGBFilterType;
RGBFilterType::Pointer rgbFilter = RGBFilterType::New();
rgbFilter->SetInput( connected->GetOutput() );
typedef itk::Image<unsigned char, 2> ScalarImageType;
typedef itk::RGBToLuminanceImageFilter<RGBImageType, ScalarImageType> LuminanceFilterType;
LuminanceFilterType::Pointer luminanceFilter = LuminanceFilterType::New();
luminanceFilter->SetInput(rgbFilter->GetOutput());
luminanceFilter->Update();
typedef itk::BinaryThresholdImageFilter<ScalarImageType, ImageType> FilterType;
FilterType::Pointer filter = FilterType::New();
filter->SetInput( luminanceFilter->GetOutput() );
filter->SetLowerThreshold(20);
filter->SetUpperThreshold(30);
filter->SetInsideValue(255);
filter->SetOutsideValue(0);
filter->Update();
typedef itk::ImageFileWriter< ScalarImageType > WriterType;
WriterType::Pointer writer = WriterType::New();
writer->SetFileName(outputFilename);
writer->SetInput(filter->GetOutput());
writer->Update();
}
return EXIT_SUCCESS;
}
本文介绍了一种使用ITK库进行图像颜色提取和处理的方法。该方法通过读取图像文件,利用连通域分析筛选出特定颜色区域,并通过阈值分割实现目标与背景分离。最后将处理后的图像保存为新文件。
6122

被折叠的 条评论
为什么被折叠?



