R语言怎么实现图像分割
这篇文章主要介绍“R语言怎么实现图像分割”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“R语言怎么实现图像分割”文章能帮助大家解决问题。
专业从事网站制作、网站设计,高端网站制作设计,小程序制作,网站推广的成都做网站的公司。优秀技术团队竭力真诚服务,采用HTML5+CSS3前端渲染技术,成都响应式网站建设公司,让网站在手机、平板、PC、微信下都能呈现。建站过程建立专项小组,与您实时在线互动,随时提供解决方案,畅聊想法和感受。
原理讲解
General Threshold 中用到了三种分割方式:
第一种,原理图如下,该方法需要设置一个低临界阈值 Lower Threshold,图像中像素值若低于这个值,其值变为 Outsidevalue,否则像素值不变;
该方法中需要设置二个参数,低像素值设定用到的是 ThresholdBelow() 函数;用户指定 Outsidevalue;
第二种,方法中需要设置一个高临界阈值 Upper Threshold,图像中像素值若高于这个值,像素值将变成 Outsidevalue,否则像素值不变;
该方法中也需要设置二个参数,高阈值设定用到 ThresholdAbove() 函数,用户指定 Outsidevalue;
第三种,结合了前两种,该方法需要设置两个阈值临界 Lower Threshold 和 Upper Threshold 两个值,若像素值介于两者之间则不变,否则设为 Outsidevalue;
方法中需要设置三个参数,低阈值设定用到 ThresholdBelow() 函数,高阈值设定用到 ThresholdAbove() 函数,用户指定 Outsidevalue;
代码实现
General Threshold 分割方法用到主要头文件为 itk::ThresholdImageFilter ;该 Filter 中阈值的设置用到两个函数:
ThresholdAbove() ;
ThresholdBelow() ;
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
itk::PNGImageIOFactory::RegisterOneFactory();
string input_name = "D:/ceshi1/ITK/Filter/General_Seg/input.png";
string output_name1 = "D:/ceshi1/ITK/Filter/General_Seg/output1.png";
string output_name2 = "D:/ceshi1/ITK/Filter/General_Seg/output2.png";
string output_name3 = "D:/ceshi1/ITK/Filter/General_Seg/output3.png";
using PixelType = unsigned char;
using ImageType = itk::Image;
using FilterType = itk::ThresholdImageFilter;
using ReaderType = itk::ImageFileReader;
using WriterType = itk::ImageFileWriter;
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();
FilterType::Pointer filter = FilterType::New();
reader->SetFileName(input_name);
writer->SetFileName(output_name1);
writer->SetInput(filter->GetOutput());
filter->SetInput(reader->GetOutput());
//first Threshold method;
filter->SetOutsideValue(0);
filter->ThresholdBelow(170);
try
{
filter->Update();
writer->Update();
}
catch (exception & e)
{
cout << "Caught Error" << endl;
cout << e.what() << endl;
return EXIT_FAILURE;
}
filter->ThresholdAbove(190);
writer->SetFileName(output_name2);
try
{
filter->Update();
writer->Update();
}
catch (exception & e)
{
cout << "Caught Error" << endl;
cout << e.what() << endl;
return EXIT_FAILURE;
}
//Third Threshold Seg;
filter->ThresholdOutside(170, 190);
writer->SetFileName(output_name3);
try
{
filter->Update();
writer->Update();
}
catch (exception & e)
{
cout << "Caught Error" << endl;
cout << e.what() << endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
该例子中,用到的输入图像为 ITK 官网提供的大脑切片 PNG 图像,参数设定情况如下:Lower Threshold 设为170,Upper Threshold 设为190,Outsidevalue 设为 0,
最后生成的结果图如下,第 2-4 张图片分别为 第一至第三种方法生成得到的结果。
关于“R语言怎么实现图像分割”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。
名称栏目:R语言怎么实现图像分割
标题URL:http://scjbc.cn/article/ijhpeh.html