摘 要
本文以篮球图像为例,重点研究了篮球图像与其他种类球的图像背景的分割,从图像中检索出篮球。由于篮球的颜色,大小,形状与其他球类相比,均有差异,且篮球上的黑色花纹对边缘检测、色彩检测均造成干扰。并非一种或者几种方法便可以解决从图像中检索出篮球的问题。
本次课程设计主要围绕目标与背景的分割与提取等两个方面对图像分割与提取算法进行展开,根据原理分析入手,通过MATLAB程序实现,深层次理解目标与背景分割算法的本质。课程设计主要研究了通过对图片进行开闭运算、以及通过两次不同方法生成的二值图像进行空洞填充后的图进行图像融合,得到较为接近球形的白色区域,进而对该区域进行边界分割,而后通过各个图像圆度的对比,锁定目标检索出篮球,通过实验验证了算法的性能。
关键字:目标与背景的分割与提取,MATLAB,开闭运算,边界分割,篮球

1引言
数字图像处理技术,用计算机对图像进行分析,以达到所需结果的技术,最早出现于20世纪50年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息,作为一门学科大约形成于20世纪60年代初期。经过数十年的发展,随着计算机科学技术的不断发展,数字图像处理已是一个跨学科的领域,图像处理和分析逐渐形成了自己的科学体系,新的处理方法层出不穷,图像分割是数字图像处理中的关键技术之一。
图像分割目的是将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,是图像处理到图像分析的关键步骤。目前图像分割方法一般有基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。其中阈值分割是一种最常见的分割方法,计算简单、效率高、速度快,通过设置不同的特征阈值将像素点分为若干类,其关键点在于阈值的选择。
尽管对图像分割算法的研究已有几十年的历史,借助各种理论至今已提出了上千种各种类型的分割算法。人们在图像分割方面做了许多研究工作。但由于尚无通用分割理论,因此现已提出的分割算法大都是针对具体问题的,并没有一种适合于所有图像的通用的分割算法。但是随着计算机技术的发展以及生产力发展的需要,图像分割方法正朝着更快速、更精确的方向发展,通过各种新理论和新技术结合将不断取得突破和进展。

2设计原理
图像的分割与提取可以分为两大类:一个是图像的分割,一个是图像的提取。下面具体介绍这两类算法。
2.1基于图像的分割
图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像素赋予相同的编号。
2.1.1 图像的二值化
二值化是图像处理中的一个重要的问题,广泛应用于图像分割,图像增强,图像识别等领域。根据其运算的范围不同,图像的二值化方法可分为全局阈值方法和局部阈值方法。它利用了图像中要提取的目标物与其背景在灰度特性上的差异,把原图像变为仅用两个灰度值表示的图像目标和背景的二值图像。其处理思想是,假设一副灰度图像中的灰度级范围是(0,255),则图像中每一点像素的灰度值为f(x,y),f(x,y)∈{0,1,…255),设阈值为T(0≤T≤255)则:

其中:g(x,y)表示二值化后图像中各个像素点的值,若g(x,y)=1表示改点为目标;若g(x,y)=0,表示改点为背景。
2.1.2 直方图分割
灰度图像中画面比较简单且对象物的灰度分布比较有规律时,背景和对象物在图像的灰度直方图上各形成一个波峰,由于每两个波峰间形成一个低谷,因而选择双峰间低谷处所对应的灰度值为阈值,可将两个区域分离。
该方法称为直方图阈值双峰。
具体实现的方法是先做出图像f(i,j)的灰度直方图,若只出现背景和目标物两区域部分所对应的直方图呈双峰且有明显的谷底,则可以将谷底点所对对应的灰度作为阈值t,然后根据该阈值进行分割即可将目标从图像中分割出来。这种方法适用于目标和背景的灰度差较大,直方图有明显低谷的情况。
2.1.3 bwboundaries 函数
搜索二值图像 BW 的外边界和内边界。
[B,L,N,A] = bwboundaries(BW,CONN,OPTIONS) :函数视 BW 中为 0 的元素为背景像素
点,为 1 的元素为待提取边界目标。 B 中的每个元素均为 Q×2 矩阵,矩阵中每一行包含边界
像素点的行坐标和列坐标, Q 为边界所含像素点的个数。 L ,标识矩阵,标识二值图像中被边
界所划分的区域; N ,区域的数目 N ; A ,被划分的区域的邻接关系。 CONN 取 4 ,搜索中采
用 4 连通方法,默认取 8 ,即 8 连通方法。 OPTIONS 指定算法的搜索方式,默认为 ‘holes’ ,
搜索目标的内外边界, ‘noholes’ 只搜索目标的外边界。
2.1.4 imbinarize 函数BW = imbinarize(I) :采用基于 OTSU 方法的全局阈值实现灰度图像 I 的二值化。
BW = imbinarize(I, METHOD) :采用 METHOD 指定的方法获取阈值实现灰度图像 I 的二值化。METHOD 可选 ‘global’ 和 ‘adaptive’ ,前者指定 OTSU 方法,后者采用局部自适应阈值
方法。
2.1.5 graythresh 函数
level = graythresh(I) ,使用 Otsu 方法获取阈值, level 被归一化到 [0,1] 区间。
2.1.6 开运算与闭运算
开运算
(1)定义
先腐蚀后膨胀的过程称为开运算。
(2)作用
消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。
闭运算
(1)定义
先膨胀后腐蚀的过程称为闭运算。
(2)作用
填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。
2.1.7区域填充
定义:设所有非边界(背景)点标记为0,则将1赋给p点开始,

实现目的:从边界内的一个点开始,用1填充整个区域。
X0=p,如果Xk=Xk-1,则算法在迭代的第k步结束。Xk和A的并集包含被填充的集合和它的边界
条件膨胀:如果对上述公式的左部不加限制,则上述公式的膨胀将填充整个区域。利用Ac的交集将结果限制在感兴趣区域内,实现条件膨胀。
填充孔洞时,A就是那个与图像四边框连通的背景区域。
2.2基于图像的提取
边缘提取是图像边缘检测和计算机视觉等领域最基本的技术,如何准确、快速的提取图像中的边缘信息一直是这些领域的研究热点,随着此项技术研究的深入和整个领域的不断发展,边缘提取技术已经成为图像分割、目标识别、图像压缩等技术的基础。其理论意义深远,应用背景广泛,有相当的使用价值和理论难度。边缘提取算法的提出通常是面向具体问题的,普遍实用性较差。
2.2.1 GUI设计
图形用于界面(GUI)是提供人机交互的工具和方法。MATLAB的GuI为开发者提供了一个不脱离MATLAB的开发环境,有助于MATLAB程序的GUI集成。
在这里插入图片描述

图2.1初始界面
在这里插入图片描述

2.1打开图像

3软件编程的实现

3.1从图像中检索出篮球编程实现

Image1=im2double(imread('pic.jpg'));
gray=rgb2gray(Image1);
T=graythresh(gray);
BW=im2bw(gray,T);
%figure,imshow(BW),title('二值化图像');
SE=strel('disk',3);
Morph=imopen(BW,SE);%形态学开运算
Morph=imclose(Morph,SE);%形态学闭运算
reMorph=1-Morph
figure,imshow(reMorph),title('形态学滤波1');
 
 
HSV = rgb2hsv(Image1);
%figure,imshow(HSV),title('HSV');
target = HSV(:,:,2);
%figure,imshow(target),title('二阶抛物线拟合(polyfit)');
%黑白色度target
Th = graythresh(target);
%%获取灰度图像target的阈值
bw = imbinarize(target,Th);
%%将灰度图像target转化为二值图像bw
bw = imfill(bw,'holes');
%填充二值图像中的空洞区域
figure,imshow(bw),title('空洞区域2');
 
g = rgb2ntsc(Image1);
%subplot, imshow(g), title('NTSC');
targets = g(:,:,2);
%figure,imshow(targets),title('二阶抛物线拟合(polyfit)');
%黑白色度target
Ths = graythresh(targets);
%%获取灰度图像target的阈值
bws = imbinarize(targets,Ths);
%%将灰度图像target转化为二值图像bws
bws = imfill(bws,'holes');
%填充二值图像中的空洞区域
figure,imshow(bws),title('空洞区域3');
 
K=reMorph+bw+bws;        %使用imadd函数进行图像融合
figure,imshow(K),title('融合后的图片');         %显示融合后的图片
 
 
%寻找边界
bw=K;
[B,L] = bwboundaries(bw,'noholes');%只关注外边界
figure(6),imshow(label2rgb(L,@jet,[.5 .5 .5]))%标记矩阵L转化为RGB图像
hold on
for k = 1:length(B)
  boundary = B{k};
  plot(boundary(:,2),boundary(:,1),'w','LineWidth',2);%绘制白色边界线
end
 
%确定圆形对象
stats = regionprops(L,'Area','Centroid');%测量图像区域的属性(实际像素数和质心)
threshold = 0.94;%阈值
% 边界循环
for k = 1:length(B)
    boundary = B{k};%获取标签“k”对应的(X,Y)边界坐标
    %计算物体的近似周长
    delta_sq = diff(boundary).^2;
    perimeter = sum(sqrt(sum(delta_sq,2)));
    
    area = stats(k).Area;%计算标签‘k’对应的面积
    metric = 4*pi*area/perimeter^2;%计算圆度
    metric_string = sprintf('%2.2f',metric);%显示结果
    if metric>0.85  %&&metric<0.84
        %disp(stats(k).Centroid)
        %getXY=stats(0).Centroid;
        disp(k);
        disp(stats(k).Centroid);
        if k==2
            getXY=stats(k).Centroid;
            getperimeter=perimeter;
        end
    end
    
    %如果圆度大于阈值threshold,则用黑色圆圈绘制圆心(代表为圆)
    if metric > threshold
        centroid = stats(k).Centroid;
        plot(centroid(1),centroid(2),'ko');
    end
  
    text(boundary(1,2)-35,boundary(1,1)+13,metric_string,'Color','y',...
       'FontSize',14,'FontWeight','bold')   %在边界左侧显示圆度
  
end
title('指标越接近1代表越接近圆形');
disp(getXY);%被选中的目标
disp(getXY(1));%x轴坐标
disp(getXY(2));%y轴坐标
disp(getperimeter);%周长
 
 
IMG_In=K;
Radius=getperimeter/7;
Center(1)=getXY(1);
Center(2)=getXY(2);
if ~(abs(Center(1)-Radius)<0 && abs(Center(2)-Radius)<0)
[m,n,~]=size(IMG_In);
[X,Y]=meshgrid(1:n,1:m);
R_temp=sqrt((X-Center(1)).^2+(Y-Center(2)).^2);
R_temp1=R_temp<=Radius;
if(numel(size(IMG_In))>2)
R_Out=R_temp1.*im2double(IMG_In(:,:,1));
G_Out=R_temp1.*im2double(IMG_In(:,:,2));
B_Out=R_temp1.*im2double(IMG_In(:,:,3));
IMG_Out(:,:,1)=R_Out;
IMG_Out(:,:,2)=G_Out;
IMG_Out(:,:,3)=B_Out;
else
IMG_Out=R_temp1.*im2double(IMG_In);
end
else
disp('exceed Radius');
end
figure,imshow(IMG_Out);
 
bw=1-IMG_Out;
bw2 = zeros(size(Image1));
bw2(:,:,1) = bw;
bw2(:,:,2) = bw;
bw2(:,:,3) = bw;
bw2 = im2uint8(1 - bw2);
ret = bitand(im2uint8(Image1),bw2);
figure,imshow(ret);

4结果及分析
4.1图像分割结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2篮球提取的最终效果
在这里插入图片描述

4.3结果分析
此次图像处理技术的综合应用设计到这里,已经基本达到了任务书所布置的内容,通过对数字图像处理技术的理解,了解了图像分割与提取的概念,并通过掌握图像阈值化的原理,实现了图像的分割与提取。虽然图像分割有着许多不同的方法,它们各有优缺点,因此对于一幅图像,采用哪种分割方法来进行分割就非常的重要。
通过对图片进行开闭运算、以及通过两次不同方法生成的二值图像进行空洞填充后的图进行图像融合,得到较为接近球形的白色区域,进而对该区域进行边界分割,而后通过各个图像圆度的对比,锁定目标检索出篮球。
通常情况下,当有噪声的图像用阈值二值化后,所得到的边界是很不平滑的,物体区域具有一些错判的孔洞,背景区域散布着一些小的噪声物体,连续的开和闭运算可以显著的改善这种情况,这时候需要在连接几次腐蚀迭代之后,再加上相同次数的膨胀,才可以产生所期望的效果。通过开闭运算加上空洞填充后的图片进行融合,即可得到较为平滑的图形边界,有利于图形的分割。

5心得体会
通过本次课程设计,对图像的分割与提取有了一定的了解,可以利用不同算法对不同图像进行了分割处理,对处理所得到的二值图进行了比较。对于一些简单图像,全局阈值法能很好的保持原图的主要信息,且实现简单、运行速度快,但对复杂图像的处理效果不佳。对于光照不均或较复杂的图像,局部阈值法可以保留更多细节,但是背景噪声比较严重,且运行速度较慢。基本自适应阈值方法也能对光照不均的图像进行处理,但是分块大小的确定还没有一个准则,只能称之为半自适应阈值分割。实践工作中遇到的需要进行二值化的图像是纷繁复杂的,上面提到的算法尚有许多方面可以改善。
总之,本次程序设计,无论在数字图像处理的理论知识还是MATLAB软件中GUI的掌握上还是对算法的编程实现上,都有了更深刻的了解与进步。并且对图像处理有了很大的兴趣,希望在今后的学习中能够更加深入的学习。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐