灰度图像二值化处理matlab(图像二值化的阈值求法)
Posted
篇首语:热水治不了百病,情话过不了一生。本文由小常识网(cha138.com)小编为大家整理,主要介绍了灰度图像二值化处理matlab(图像二值化的阈值求法)相关的知识,希望对你有一定的参考价值。
灰度图像二值化处理matlab(图像二值化的阈值求法)
图像二值化的操作,就是寻找一个合适的阈值T,把图像中所有像素值小于等于该阈值的像素点设置为一个像素值,同时把图像中所有像素值大于该阈值的像素点设置为另一个像素值。也就是说,二值化之后整幅图像中只有两种灰度值。对于一帧8位的图像,二值化操作通常是把其像素值设置为0或255,从直观上看就是把具有灰度变化的图像设置为只有黑与白的黑白图像,0值对应黑色,255值对应白色。由此可知,二值化效果的好坏取决于阈值T的选取是否合适,阈值T就相当于黑白色的分界线。
图像二值化的操作在数字图像处理中具有重要作用,该操作把图像变成黑白之后,可以凸显图像的重要轮廓与结构,大大减少运算量。比如在细胞的荧光成像中,常常需要把细胞区域(也即较亮区域)识别出来,很重要的一步就是把荧光成像的图像转换为二值图像,细胞区域为白色,背景区域为黑色,这样才便于检测细胞轮廓,从而识别细胞。
最常用的求阈值算法有大津法和迭代法。本文针对荧光图像的二值化操作,详细讲解这两种算法的原理,同时对迭代法进行改进,使其可以求出更加合适的阈值。
1. 大津法,简称为OTSU算法,属于自适应的阈值确定方法,其核心思路是寻找一个阈值T,把图像的所有像素点分成两类,一类的像素值均小于等于T(背景区域),另一类的像素值均大于T(前景区域),当这两类的类间方差取得最大值时,则认为该T值为最合适的阈值。假设背景区域所有像素点数为n0,其占图像总像素数的比例为p0,平均像素值为m0;前景区域所有像素点数为n1,其占图像总像素数的比例为p1,平均像素值为m1;图像的所有像素点数为n、平均像素值为m。那么有以下关系式:
定义类间方差g为:
那么由以上3式可以得到下式,这就是类间方差的计算公式。
循环遍历图像可能取到的所有像素值作为阈值T,使g取得最大的T值则认为是最合适的阈值。比如8位图像所有可能的取值为0~255,那么分别计算出T取值0~255时的g值,当g值取得最大值,则认为找到了最佳阈值。
使用大津法确定阈值,对一张荧光细胞图像进行二值化,得到的结果如下图所示。可以看到细胞区域基本被标识为白色区域,与背景区域区别开来。
原图
大津法求阈值的二值化结果图
2. 迭代法
迭代法也属于自适应的阈值确定方法,其核心思路是通过多轮迭代运算来一步一步逼近最佳阈值。设置一个初始阈值T0,同样把图像的所有像素点分成两类,一类的像素值均小于等于T0(背景区域),另一类的像素值均大于T0(前景区域),然后分别计算背景区域与前景区域的像素平均值m0、m1,并取m0与m1之和的一半作为下一轮迭代的阈值。如果当前轮迭代得到的阈值与上一轮迭代的阈值相差很小,则结束迭代。迭代流程如下图所示:
使用迭代法求阈值,并对同一张荧光细胞图像进行二值化,得到的结果如下图所示。可以看到细胞区域也基本被识别出来。
迭代法求阈值的二值化结果图
3. 迭代法的改进。当荧光图像的背景亮度与细胞区域亮度的区别不是那么明显,也即背景区域比较亮的时候,使用大津法和迭代法确定阈值,会得到比较差的二值化结果,细胞区域不能很好地与背景区域区别开来。如下图所示,可以看到很大片的背景区域二值化之后也变成了白色。
原图
大津法求阈值的二值化结果图
迭代法求阈值的二值化结果图
由上图可知,由大津法与迭代法取得的阈值,与较亮的背景区域的像素值比较接近,导致较亮的背景区域也被误划分为细胞区域(白色区域)。下面我们对迭代法进行改进,使其求得的阈值更接近细胞区域的像素值,从而与较亮背景区域的像素值区分开来。观察迭代法的阈值更新公式,可以知道该算法每次取m0与m1之和的一半来更新阈值:
为了使阈值更接近m1,我们修改上述公式,增大m1的比重,同时减小m0的比重:
matlab的graythresh函数已经实现了大津法求阈值,所以在此我们不再重复实现,下面仅贴出改进之后的迭代法matlab代码:
% 最佳阈值法获取图像二值化的阈值% T - 得到的最佳阈值% I - 输入图像% allow - 迭代过程中,当前迭代得到的阈值与下一轮迭代得到的阈值之差的绝对值小于allow,则认为找到了最佳阈值function [T] = get_threld(I, allow)[x,y] = size(I); % 求出图象行列数b = double(I); %把图像由整型转换为浮点型 T_current = mean(b(:)); %取图像的均值作为初始阈值T0T_next = 0; %TT赋初值S0 = 0.0; %为计算灰度大于阈值的元素的灰度总值、个数赋值n0 = 0.0; S1 = 0.0; %为计算灰度小于阈值的元素的灰度总值、个数赋值n1 = 0.0; d = abs(T_current-T_next);count = 0;% 记录几次循环while(d >= allow) % 迭代最佳阈值分割算法 count = count+1; %迭代次数加1 for i = 1:x %遍历每一行 for j = 1:y %遍历每一列 if b(i,j) >= T_current %计算图像中所有像素值大于阈值的点的像素值之和 S0 = S0 + b(i,j); n0 = n0 + 1; else %计算图像中所有像素值小于阈值的点的像素值之和 S1 = S1 + b(i,j); n1 = n1 + 1; end end end T0 = S0/n0; %计算图像中所有像素值大于阈值的点的像素值平均值 T1 = S1/n1; %计算图像中所有像素值小于阈值的点的像素值平均值 %T_next = (T0+T1)/2; %原迭代算法 T_next = T1 + (T0-T1)*0.9; %改进的迭代算法 d = abs(T_current-T_next); %当前迭代得到的阈值与下一轮迭代得到的阈值之差的绝对值 T_current = T_next; %把下一轮迭代的阈值赋值给当前轮迭代的阈值endmmax = max(max(I));T = T_current/double(mmax); %把求得的阈值处以图像的最大像素值进行归一化end
运行以上matlab代码,得到的二值化结果如下图所示。可以看到改进之后的迭代算法求取的阈值,可以很好地区分细胞区域与背景区域。因此我们的小改进还是具有不错的效果的。
改进的迭代法求阈值的二值化结果图
相关参考
数字图像处理的MATLAB实现(「十五」MATLAB图像处理之一)
...理工作。MATLAB支持四种图像类型,即RGB图像、索引图像、灰度图像和二值图像。实质上,MATLAB还支持另一种图像类型,即多帧图像阵列,其是MATLAB视频处理和图像处理的桥梁。视频其实就是大量图片的有序排列,只要每张图片播...
灰度也就是所谓的色阶或灰阶,是指亮度的明暗程度。也称中间色调。LED显示屏的灰度等级越高,颜色越丰富,色彩越艳丽;反之,显示颜色单一,变化简单。灰度图像是一种具有从黑到白256级灰度色阶或等级的单色图像。该图...
灰度也就是所谓的色阶或灰阶,是指亮度的明暗程度。也称中间色调。LED显示屏的灰度等级越高,颜色越丰富,色彩越艳丽;反之,显示颜色单一,变化简单。灰度图像是一种具有从黑到白256级灰度色阶或等级的单色图像。该图...
步道砖模具设计制造(钼矿渣高值化利用生产装饰砖——“高值、低碳、循环经济”样板工程解析)
■唐奇尾渣亟需再利用钼作为一种重要的金属矿产资源,是生产高强钢、超级合金等所必需的原料。全球钼资源分布高度集中,我国钼资源储量丰富,分布广泛。钼常与其他硫化矿物共生,品位低、嵌布粒度细、共生关系密切,...
打印机打印出来有黑底(彩色打印机图片打印出来是黑白的怎么办?简单6步轻松解决)
...并解决彩色图像被打印成黑白图像的问题:第一步:检查灰度打印设置如果在打印机实用程序中设置了“灰度打印”,那么打印输出显示的图像都是黑白的。如果需要打印的彩色图像被打印成黑白图像,请根据以下步骤检查一下...
查看原文:全球盛行的PS泡沫高值化回收再生解决方案请关注“废塑料新观察”微信公众号!在回收站点遍布上海的今天,相信大家对盛行的“两网融合”并不陌生。“两网融合”指城市环卫系统与再生资源系统两个网络有效衔...
煤矸石是在煤矿开采中产生的一种固体废弃物,是在成煤过程中,伴随煤炭而生的一种废弃岩石。中国的煤炭开采量位于全球之首,固体废弃物煤矸石随着我国煤炭行业的发展而产生,如建井时、改扩建矿井和原料煤洗煤时...
煤矸石是在煤矿开采中产生的一种固体废弃物,是在成煤过程中,伴随煤炭而生的一种废弃岩石。中国的煤炭开采量位于全球之首,固体废弃物煤矸石随着我国煤炭行业的发展而产生,如建井时、改扩建矿井和原料煤洗煤时...
怎样用matlab给数据画曲线图(「四」MATLAB语言之二维绘图操作)
...提供了直接对图形句柄进行操作的底层绘图操作,即GUI(图像用户界面)设计。这类操作将图形的每个图形元素(如坐标轴、曲线、文字等)看做一个独立的对象,系统给每个对象分配一个句柄,可以通过句柄对该图形元素进行...
控制一体机(「机器视觉运动控制一体机小课堂」三分钟进行灰度匹配)
...述了基于形状的模板匹配,本期课程我们去了解一下基于灰度值的模板匹配。基于灰度值的模板匹配适用于图像内灰度变化比较稳定,噪声比较少,且灰度差异比较明显的检测目标。这是一种不太推荐的匹配方法,因为该方法复...