欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MATLAB 图像处理2 二值化,背景估计,连通区域分析

程序员文章站 2022-05-20 22:48:51
...

引子:如何计算下图中米粒的个数及各米粒的大小?
MATLAB 图像处理2 二值化,背景估计,连通区域分析

1.进行二值化(背景-->黑,前景(米粒)-->白)
2.计算连通的白色区域数(米粒数)
3.计算每个区域包含多少个像素(米粒大小)

#二值化结果:见下图

MATLAB 图像处理2 二值化,背景估计,连通区域分析

问题:
1.背景中存在噪点(没有米粒的地方出现了白色的像素)
2.一些米粒消失了

原因:
打光不均匀,上半部分比下半部分亮
导致上半部分的背景被误判为前景(问题1)
下半部分的前景被误判为背景(问题2)

解决方法:进行背景估计,然后剪掉不均匀的背景

一.图像二值化(Image Binarization)
1.基本原理:

1.找到灰度阈值(Gray Scale Thresholding),记为T
2.将灰度大于T的像素变为白色,灰度小于T的像素变为黑色

2.方法:
(1)计算灰度阈值:

[<T>[,<EM>]] = graythresh(<I>):使用Otsu方法计算灰度图的全局灰度阈值
  #(???)Otsu方法(即最大类间方差法)选择1个阈值,使阈值化的黑白像素的类内方差最小化
  #全局阈值T可与imbinarize()结合使用以将灰度图转换为二值图像
  #参数说明:
    I:指定灰度图
    T:返回得到的全局灰度阈值
    EM:返回有效性度量

#实例:
>> I = imread('coins.png');
>> level = graythresh(I)
level = 0.4941
>> BW = imbinarize(I,level);
>> imshowpair(I,BW,'montage')%结果见下图

MATLAB 图像处理2 二值化,背景估计,连通区域分析
(2)进行二值化:

<BW> = imbinarize(<I>[,<method>]):通过阈值化将2/3维灰度图像二值化
  #参数说明:
    I:指定2/3维灰度图像
    method:指定寻找阈值的ff;默认为Otsu方法
      #详情参见官方文档
    BW:返回二值图像
<BW> = imbinarize(<I>,<T>):功能同上,不过是手动指定阈值
  #参数说明:BW,I同上
    T:指定阈值
<BW> = imbinarize(<I>,"adaptive"[,"<Name>",<Value>]):使用键值对组控制阈值,创建二值图像
  #参数说明:BW,I同上
    Name,Value:指定键值对,用于控制自适应阈值的各个方面

#实例:
>> I = imread('coins.png');
>> BW = imbinarize(I);
>> figure
>> imshowpair(I,BW,'montage')%结果见下图1

>> I = imread('rice.png');
>> BW = imbinarize(I, 'adaptive');
>> figure
>> imshowpair(I,BW,'montage')%结果见下图2

%对前景比背景暗的图像进行二值化:
>> I = imread('printedtext.png');
>> figure
>> imshow(I)%结果见下图3
>> title('Original Image')
>> BW = imbinarize(I,'adaptive','ForegroundPolarity','dark','Sensitivity',0.4);
>> figure
>> imshow(BW)%结果见下图4
>> title('Binary Version of Image')

%使用全局阈值对三维体进行二值化:
>> load mristack;
>> V = mristack;
>> figure
>> slice(double(V),size(V,2)/2,size(V,1)/2,size(V,3)/2)%查看3维图像的切片,结果见下图5
>> colormap gray 
>> shading interp
>> J = imbinarize(V);
>> figure
>> slice(double(J),size(J,2)/2,size(J,1)/2,size(J,3)/2)%查看3维二值图像的切片,结果见下图6
>> colormap gray 
>> shading interp

MATLAB 图像处理2 二值化,背景估计,连通区域分析
MATLAB 图像处理2 二值化,背景估计,连通区域分析
MATLAB 图像处理2 二值化,背景估计,连通区域分析
MATLAB 图像处理2 二值化,背景估计,连通区域分析
MATLAB 图像处理2 二值化,背景估计,连通区域分析
MATLAB 图像处理2 二值化,背景估计,连通区域分析

<BW> = im2bw(<I>,<level>):基于阈值将灰度图转换为二值图像(不推荐)
  #参数说明:
    I:指定灰度图
    level:指定阈值;为[0,1]内的标量
      灰度>level的像素替换为白色,灰度≤level的像素替换为黑色
    BW:返回二值图像
<BW> = im2bw(<X>,<map>,<level>):基于阈值将索引图像转换为二值图像(不推荐)
  #参数说明:BW,level同上
    X:指定索引图像
    map:指定颜色图
<BW> = im2bw(<RGB>,<level>):将于阈值将真彩色图像转换为二值图像(不推荐)
  #参数说明:BW,level同上
    RGB:指定真彩色图像

注意:如果输入不是灰度图像,则先将图像转换为灰度图像,再通过阈值将灰度图像转换为二值图像

#实例:
>> load trees
>> BW = im2bw(X,map,0.4);
>> imshow(X,map);%结果见下图1
>> figure;
>> imshow(BW);%结果见下图2

MATLAB 图像处理2 二值化,背景估计,连通区域分析
MATLAB 图像处理2 二值化,背景估计,连通区域分析
二.背景估计(Background Estimation)

三.连通区域分析(Connected-Component Labeling/Analysis)

相关标签: MATLAB