在matlab中,可以通过直接编程的方法来计算图像目标区域的质心[6],也可以通过专用的质心函数( regionprops() )达到同样的目的[7]。

然而,在VTK中并没有找到专门用于计算图像目标区域质心的类,唯有通过ITK来实现。下面是主要的实现代码。

QList <QPoint3D> calculateRegionCentroid(vtkImageData *data)
{QList < QPoint3D > centroids; // QPoint3D是仿照QPoint(不支持浮点数)而定义的一个类,支持浮点数if ( !data )return centroids;double spacing[3];data->GetSpacing( spacing );itk::VTKImageToImageFilter<UCharImageType>::Pointer    vtk2itkConnector // 将VTK图像转换为ITK图像= itk::VTKImageToImageFilter< UCharImageType>::New();BinaryImageToLabelMapFilterType::Pointer binaryImageToLabelMapFilter= BinaryImageToLabelMapFilterType::New();LabelMapToLabelImageFilterType::Pointer  labelMapToLabelImageFilter= LabelMapToLabelImageFilterType::New();LabelGeometryImageFilterType::Pointer labelGeometryImageFilter= LabelGeometryImageFilterType::New();vtk2itkConnector->SetInput( data );binaryImageToLabelMapFilter->SetInput( vtk2itkConnector->GetOutput() );labelMapToLabelImageFilter->SetInput( binaryImageToLabelMapFilter->GetOutput());labelGeometryImageFilter->SetInput( labelMapToLabelImageFilter->GetOutput() );// These generate optional outputs.labelGeometryImageFilter->CalculatePixelIndicesOn();labelGeometryImageFilter->CalculateOrientedBoundingBoxOn();labelGeometryImageFilter->CalculateOrientedLabelRegionsOn();labelGeometryImageFilter->Update();LabelGeometryImageFilterType::LabelsType allLabels = labelGeometryImageFilter->GetLabels();LabelGeometryImageFilterType::LabelsType::iterator allLabelsIt;for( allLabelsIt = allLabels.begin(); allLabelsIt != allLabels.end(); allLabelsIt++ ) {LabelGeometryImageFilterType::LabelPixelType labelValue = *allLabelsIt;if ( (int)labelValue > 0 ) {double x = labelGeometryImageFilter->GetCentroid( labelValue )[0];double y = labelGeometryImageFilter->GetCentroid( labelValue )[1];centroids.append( QPoint3D( x * spacing[0], y * spacing[1], 0 ) );}}binaryImageToLabelMapFilter->SetInput( NULL );labelMapToLabelImageFilter->SetInput( NULL );labelGeometryImageFilter->SetInput( NULL );vtk2itkConnector->SetInput( NULL );return centroids;
}

参考资料

[1]图像处理之计算二值连通区域的质心

[2]图形图像基本处理之——一个非常容易理解的图像求质心代码

[3]Image processing -Algorithm to calculate centroids of white space in binary image

[4]how to find the centroid of a binary image?

[5]图像目标质心快速搜索算法

[6]MATLAB中求图像中某一区域的质心

[7]regionprops函数中centroid求质心,其质心评定原理?

图像目标区域质心计算相关推荐

  1. python如何做四象图_Python使用四个坐标点来剪切图像目标区域的最小外接矩形,python,利用,对,图片,进行,裁剪...

    在图像裁剪操作中,opencv和pillow两个库都具有相应的函数,但是这两个库中的函数仅仅能对与图片平行的矩形进行裁剪操作,如果想要对目标的最小外接矩形进行裁剪该如何操作呢?如下所示: 具体处理该问 ...

  2. matlab如何手动选择图像目标区域,如何用MATLAB实现感兴趣区域ROI的选取

    描述 感兴趣区域 感兴趣区域(Regions of Interest,ROI)这一概念,是指图像中最能引起用户兴趣.最能表现图像内容的区域.感兴趣区域(Regions of Interest,ROI) ...

  3. matlab单个像素面积,我用MATLAB计算出了图像目标区域的像素点个数,请问知道了目标区域的像素点怎么计算目标区域的面积?...

    满意答案 下面是一个简单的计算轮廓包含起来的像素点的个数的程序: %% step 1 clear all clc I=imread('test.bmp');%读入图片 bwI=im2bw(I,0.5) ...

  4. 基于python+opencv的图像目标区域自动提取

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 一.提取纸张中的内容 一张照片中的感兴趣区域总是沿着x,y,z三个轴都有一定倾斜(如下图),要 ...

  5. 利用OpenCV对图像倾斜矩形目标区域进行固定大小裁剪

    文章目录 目的 效果展示 为什么要固定大小裁剪? 代码及解释 原始文件 代码 代码解释 ① 主程序 ② ReadTxt() 函数 ③ rotate() 函数 目的 这篇博客主要介绍如何使用 OpenC ...

  6. matlab频域滤波处理,手动滤波,图像去网格背景:频域中手动选择目标区域进行滤波,滤掉噪声,灵活地达到理想的效果。

    目录 一.原理简介 二.现有方法 三.代码实现 四.测试结果图 一.原理简介 主要思路为:通过傅里叶变换,将图像显示在频率域中,通过观察频谱图,如果了解频谱图与原图之间的关联,可以较为容易地发现噪声在 ...

  7. C#联合Halcon用于判断图像前景/背景,若前景目标区域连通域个数超越某阈值,则展开评价;否则不计入评价

    //用于判断图像前景,若前景目标区域连通域个数超越某阈值,则展开评价:否则不计入评价HOperatorSet.Decompose3(ho_Image, out ho_R, out ho_G, out ...

  8. 利用opencv进行圆形标志提取和质心计算

    利用opencv进行圆形标志提取和质心计算 最近跟着老师做项目,需要对图片中拍摄的圆形标志点进行检测和提取,查了一些资料和博客,记录一下过程.实际拍摄的图片如图所示: 图片处理过程的大概思路是: 1. ...

  9. OpenCV后投影,利用阈值函数分割指定区域生成掩膜,通过直方图分布查找其他图像相同区域。

    一.API函数 void mixChannels(const Mat* src,int nsrc,Mat* dst ,int ndst,const int* fromTo,size_t npairs) ...

最新文章

  1. 论文:Multi-Objective Modified Grey Wolf Optimizer for Optimal Power Flow-最优潮流
  2. linux 日志服务器简单用
  3. [转载] 推荐的C++书籍以及阅读顺序
  4. Java 8 中的 java.util.Optional
  5. [Python] 字典 update()函数:在字典中更新 (或加入) 键值对
  6. VMwareESX上的SCOM控制台无法正常运行
  7. java 设置启动参数设置_1.java程序启动参数配置
  8. 更换tomcat 地址栏图标
  9. 原来这就是公文写作领导讲话稿万能模板(1)
  10. ASP.NET 实现简单的注册界面(使用asp控件)
  11. JDK1.8帮助文档 chm格式中英文
  12. 适用于 Windows 7 SP1 和 Windows Server 2008 R2 SP1 的扩展安全更新(ESU)许可准备程序包
  13. 我的世界服务器登录显示motd,[信息]ColorMOTD —— 究极Motd插件,外带反压测[1.7-1.8]...
  14. 一个 Duang~ 的CSS3动画
  15. 竟有比双十一更令人发指的福利……
  16. json和ajax的使用
  17. linux cfs时间,Linux调度的实现(CFS)——虚拟时间计算
  18. java 头尾 队列_java总结之 链表实现队列
  19. linux login as,PuTTY登录后SSH提示login as怎么回事?
  20. containerd对接harbor

热门文章

  1. 智能车 PID 调试
  2. Weblogic12C概述及安装
  3. 走进Web3万链互联:跨链跨层、锁定+铸造与哈希时间锁定
  4. springboot el表达式
  5. Python文本整理案例分析:《全唐诗》文本整理
  6. 空间计量xsmle命令遇到(3200)error,
  7. 如何创造财富——How to Make Wealth
  8. xjar 对Spring-Boot JAR 包加密运行工具
  9. 辐射3游戏登录是提示计算机丢失xlive.dll文件,win10系统辐射3提示丢失xlive.dll怎么办...
  10. java欧拉函数_欧拉函数(总结)