itk neighbhood

#include "itkImage.h"
#include "itkNeighborhoodOperatorImageFunction.h"
#include "itkNeighborhoodOperator.h"

using UnsignedCharImageType = itk::Image<unsigned char, 3>;

static void
CreateImage(UnsignedCharImageType::Pointer image);

    UnsignedCharImageType::Pointer image = UnsignedCharImageType::New();
    CreateImage(image);

    std::array<int, 6> elment6 = {4,10,12,14,16,22};
    std::array<int, 18> elment18 = { 1,3,4,5,7,9,10,11,12,14,15,16,17,19,21,22,23,25 };

    itk::Neighborhood<float, 3> neighborhood6, neighborhood18,neighborhood26;
    neighborhood6.SetRadius(1);
    neighborhood18.SetRadius(1);
    neighborhood26.SetRadius(1);
    

    for (unsigned int i = 0; i < neighborhood26.GetSize()[0] * neighborhood26.GetSize()[1]* neighborhood26.GetSize()[2]; ++i)
    {
        neighborhood18[i] = 0;
        neighborhood6[i] = 0;
        neighborhood26[i] = 1;
    }
    neighborhood26[13] = 0;

    for (auto index : elment6)
    {
        neighborhood6[index] = 1;
    }
    for (auto index : elment18)
    {
        neighborhood18[index] = 1;
    }
    itk::Neighborhood<float, 3> neighborhood_6_18, neighborhood_18_26;
    neighborhood_6_18.SetRadius(1);
    neighborhood_18_26.SetRadius(1);
    for (unsigned int i = 0; i < neighborhood26.GetSize()[0] * neighborhood26.GetSize()[1] * neighborhood26.GetSize()[2]; ++i)
    {
        neighborhood_6_18[i] = neighborhood18[i] - neighborhood6[i];
        neighborhood_18_26[i] = neighborhood26[i] - neighborhood18[i];
    }
    std::cout << neighborhood6.GetOffset(4) << "\n";
  //  std::cout << neighborhood6.Get << "\n";

    using NeighborhoodOperatorImageFunctionType = itk::NeighborhoodOperatorImageFunction<UnsignedCharImageType, float>;
   auto neighborhoodOperatorImageFunction = NeighborhoodOperatorImageFunctionType::New();
    neighborhoodOperatorImageFunction->SetOperator(neighborhood6);
    neighborhoodOperatorImageFunction->SetInputImage(image);

    auto neighborhoodOperatorImageFunction18 = NeighborhoodOperatorImageFunctionType::New();
    neighborhoodOperatorImageFunction18->SetOperator(neighborhood18);
    neighborhoodOperatorImageFunction18->SetInputImage(image);

    auto neighborhoodOperatorImageFunction26 = NeighborhoodOperatorImageFunctionType::New();
    neighborhoodOperatorImageFunction26->SetOperator(neighborhood26);
    neighborhoodOperatorImageFunction26->SetInputImage(image);

    auto neighborhoodOperatorImageFunction12 = NeighborhoodOperatorImageFunctionType::New();
    neighborhoodOperatorImageFunction12->SetOperator(neighborhood_6_18);
    neighborhoodOperatorImageFunction12->SetInputImage(image);

    auto neighborhoodOperatorImageFunction8 = NeighborhoodOperatorImageFunctionType::New();
    neighborhoodOperatorImageFunction8->SetOperator(neighborhood_18_26);
    neighborhoodOperatorImageFunction8->SetInputImage(image);

    {
        itk::Index<3> index;
        index.Fill(30);

        float output6 = neighborhoodOperatorImageFunction->EvaluateAtIndex(index);   
        std::cout << "Sum on border: " << output6 << std::endl;
        float output18 = neighborhoodOperatorImageFunction18->EvaluateAtIndex(index);
        std::cout << "Sum on border: " << output18 << std::endl;
        float output26 = neighborhoodOperatorImageFunction26->EvaluateAtIndex(index);
        std::cout << "Sum on border: " << output26 << std::endl;
        float output12 = neighborhoodOperatorImageFunction12->EvaluateAtIndex(index);
        std::cout << "Sum on border: " << output12 << std::endl;
        float output8 = neighborhoodOperatorImageFunction8->EvaluateAtIndex(index);
        std::cout << "Sum on border: " << output8 << std::endl;
    }

  
    return EXIT_SUCCESS;
}

void
CreateImage(UnsignedCharImageType::Pointer image)
{
    // Create an image with 2 connected components
    UnsignedCharImageType::IndexType start;
    start.Fill(0);

    UnsignedCharImageType::SizeType size;
    size.Fill(100);

    UnsignedCharImageType::RegionType region(start, size);

    image->SetRegions(region);
    image->Allocate();
    image->FillBuffer(0);

    // Make a square
    for (unsigned int r = 20; r < 80; r++)
    {
        for (unsigned int c = 20; c < 80; c++)
        {
            for (unsigned int u = 20; u < 80; u++)
            {
                UnsignedCharImageType::IndexType pixelIndex;
                pixelIndex[0] = r;
                pixelIndex[1] = c;
                pixelIndex[2] = u;
                image->SetPixel(pixelIndex, 10);
            }
        }
    }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值