图像阈值分割是一个非常简单的

而现在遇到的阈值分割却需要完成如下的多个功能:

1、基本的阈值分割:

大于阈值,则认为是目标;小于,则认为是背景

2、像素值较低才被认为是目标,即要把不等号反向

对图像像素点,小于阈值,认为是目标;大于阈值,则认为是背景。

3、可能进行阈值分割的图像只是标记图像

对标记图像进行分割后,需要在原始的图像上对分割的目标区域进行展示

这就需要输入原始图像

原始图像可能是灰度图像,也有可能是彩色图像

4、多个阈值进行分割

输出每个阈值进行分割的结果

花费了两个小时,完成了单阈值分割完成了功能1、2、3;本来将功能4也整合进来了,但感觉如此一来,代码太过费解,并且有一定的代码冗余,因此将其分离成一个单独的函数,通过调用单阈值分割实现。

功能 2 的实现: 增加一个偏置 标记 bias

若为1,则表示正常情况,大于阈值,则认为是目标

为-1时,则反之。

进行比较时用:bias*image>bias*thresh 对两种情况通用

% 对标记图像进行阈值分割

%

% 标记图像里像素值大于Thresh,则认为时病斑,否则认为是非病斑

%

% 输入:

% image     进行阈值分割的图像

% thresh     分割的阈值

% bias        分割的偏置,默认为1

%                bias=+1大于阈值为1,小于阈值为0

%                bias=-1大于阈值为0,小于阈值为1

% bgImage   背景图像,image上标识为目标的区域被保留,而标识为背景的则删除

%                  默认为进行阈值分割的图像,即image

%

% 输出:

% labBinaryImage 标识病斑图像、二值图像

% labSrcImage    在背景图像上作标记,标识病斑区域

%

%[labBinaryImage,labSrcImage]=ThreshSegement(image,thresh);

%[labBinaryImage,labSrcImage]=ThreshSegement(image,thresh,bias);

%[labBinaryImage,labSrcImage]=ThreshSegement(image,thresh,bias,bgimage);

%

%2007-11-08%

function[labBinaryImage,labSrcImage]=ThreshSegement(image,thresh,varargin)

iptchecknargin(2,4,nargin,mfilename);% 检测输入参数数量iptcheckinput(image,{'numeric'},{'2d','real','nonsparse'},mfilename,'image',1);

iptcheckinput(thresh,{'numeric'},{'row','nonempty','real'},mfilename,'thresh',2);

thresh=thresh(1);% 只取第一个阈值bias=1;% 偏置,默认为1if(nargin>2)               % 指定偏置

    bias=varargin{1};end

if(bias~=1)                  % 偏置只允许取值1和-1    bias=-1;

end

image=double(image);% 类型转换iptcheckinput(bias,{'numeric'},{'row','nonempty','integer'},mfilename,'bias',3);

if(nargin>3)        % 显示的背景图像

    bgImage=varargin{2};

if( (size(bgImage,1)~=size(image,1))||(size(bgImage,2)~=size(image,2)) )

        error('背景图像大小需与分割图像完全一致。');

end

else

    bgImage=image;% 默认为进行阈值分割的图像imageend

iptcheckinput(bgImage,{'numeric'},{'real','nonsparse'},mfilename,'bgImage',4);

% 阈值分割,生成两幅标记图像

labBinaryImage=zeros(size(image));% 在二值图像上标识病斑区域labBinaryImage(find(bias*image>=bias*thresh))=1;

if ( nargout>1)                              % 输出背景图像上标识病斑区域

    for cur=1:size(bgImage,3)      % 对每个平面均进行标记,灰度图像与彩色图像均可

        curLabSrcImage=bgImage(:,:,cur);curLabSrcImage(find(bias*image

labSrcImage(:,:,cur)=curLabSrcImage;

end

end

但也还存在一个问题,就是边界情况。即 bias*image=bias*thresh 的像素点的类别。bias取不同值其归类规则略有差别。比如归类规则:bias*image>bias*thresh,bias=1时表示大于阈值则认为是目标像素;bias=-1则小于等于阈值认为是目标像素。两者差一个等号。不能做到一致。

图像阈值分割matlab,图像阈值分割Matlab版 | 学步园相关推荐

  1. matlab如何进对图像进行透视变换,在Matlab中实现透视变换的方法 | 学步园

    透视变换在两幅图像中进行对应非常有用,看下面的两幅图 第一幅图是源图像,图中有五个点,分别是四个顶点和中间的一个点(对应目标图中的中心点) 第二幅图是目标图,包括与源图像中的五个点对应的五个点 下面就 ...

  2. matlab cdf,Matlab 简单计算PDF和CDF | 学步园

    通信的魅力就是在于随机性中蕴含的确定性,这也就是为什么你随便拿出一本通信方面的教材,前面几章都会大篇幅的讲解随机过程,随机过程也是研究生必须深入了解的一门课,特别是对于信号处理以及通信专业的学生. 在 ...

  3. matlab中fval函数,收集整理Matlab中的linprog函数使用说明 | 学步园

    linprog函数是用来求解线性规划问题,其中,f,x,b,beq,lb,ub为向量,A,Aeq为矩阵. a).x=linprog(f,A,b) 功能:求解最小化问题:min f*x,条件:A*x≤ ...

  4. matlab knn,MATLAB K近邻算法 — knnsearch() 函数 | 学步园

    K近邻 IDX = knnsearch(X,Y) finds the nearest neighbor in X for each point in Y. X is an MX-by-N matrix ...

  5. matlab人工选择阈值进行分割,基于MATLAB的图像阈值分割算法的研究

    [摘要]:图像分割是一种重要的数字图像处理技术.本文首先介绍了图像分割技术,其次总结了目前图像分割技术中所用到的阈值.边缘检测.区域提取等方法以及分水岭算法.针对各种阈值分割算法,本文在最后做了详细的 ...

  6. MATLAB图像融合分割系统

    摘 要 图像分割是一种重要的图像分析技术.对图像分割的研究一直是图像技术研究中的热点和焦点.图像分割是一个很关键的图像分析技术,是由图像处理进到图像分析的关键步骤.它的目的就是把图像中感兴趣的那部分分 ...

  7. 【车牌识别】基于matlab GUI阈值分割车牌识别(带面板)【含Matlab源码 721期】

    ⛄一.车牌识别简介 1 车牌图像处理 车牌图像处理主要有五个组成部分:图像灰度化.图像二值化.图像边缘检测.图像形态学运算和图像滤波处理.它是车牌识别系统中最根本且最基础的操作,车牌图像处理的好坏情况 ...

  8. 道路分割 matlab,MATLAB图像的道路分割技术研究

    摘要:道路分割是基于图像分割的一种技术,并且它是一项非常重要的在数字图像处理中,首先要说的就是图像分析,它在计算机视觉中属于最基本的部分,图像理解是它最重要的一部分,在多个领域中也是一个十分重要和苦难 ...

  9. matlab如何截取图像的中间部分_利用matlab提取并分割RGB图像中的某一个已知像素值的图像...

    已知一副RGB图像中的的像素值,利用matlab将其分割出来并以二进制图像形式显示: %extract.m clear all; I=imread('new_original.png'); figur ...

最新文章

  1. FPGA 核和FPGA Fabric的区别是什么?
  2. Bluetooth Low Energy 嗅探
  3. MySQL的体系结构是C S结构_c/s结构的数据库系统结构是指
  4. android studio 入门比较好的书籍
  5. oracle里的AUE是什么意思,oracle 创建表空间步骤代码
  6. 关键词是用分号还是逗号隔开_逗号、顿号、分号、冒号、破折号的用法
  7. 【声传播】——多层介质平面波的反射问题
  8. ktv app html,ktv.html
  9. windows phone 7 学习笔记 五 TileSample
  10. MongoDB 在windows shell环境下的基本操作和命令的使用示例(二)
  11. Win8.1部署 .NET Framework 3.5 安装方式汇总
  12. 自制力才是你努力的第一步
  13. python中sticky_position: sticky 详解(防坑指南)
  14. 网络编程--探讨一些边界条件
  15. 如何解决 Critical dependency: the request of a dependency is an expression ?
  16. matlab笔记:一元微分方程求解
  17. 一个游戏策划的八年回忆录
  18. js常见面试题及简单回答
  19. 什么是代码?code?
  20. 正则表达式?:代表什么意思

热门文章

  1. 服务器未下载不明文件 怎么还会中毒
  2. Ceph 创建/删除存储池、设置存储池副本数
  3. Kettle使用中的20个常见问题
  4. php libevent 问题,PHP Socket 初探 —— 硬着头皮继续 libevent(二)
  5. python的web应用框架_python应用webpy框架
  6. Ubuntu单系统重装windows10系统
  7. buu-[CISCN2019 总决赛 Day2 Web1]Easyweb
  8. 无法定位序数9828于动态链接库或者exe
  9. Ralink SDK NVRAM和WIFI配置的关系
  10. 在计算机系统中 控制和管理各种资源,操作系统试题2