《itk实用demo》-两种颜色提取一种

本文介绍了一种使用ITK库进行图像颜色提取和处理的方法。该方法通过读取图像文件,利用连通域分析筛选出特定颜色区域,并通过阈值分割实现目标与背景分离。最后将处理后的图像保存为新文件。

颜色提取

#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;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值