一、引言
对彩色图像进行分割的一种常用方法,是先把彩色图像转灰度图像,然后再选择合适的阈值进行二值分割。但有时彩色图像转灰度图像后不具有典型的双峰特性,二值分割效果不好。本文章提出一种确定彩色图像分割方法的新思路。首先读入一幅彩色图像fruit.jpg,然后对其各通道的灰度直方图进行分析,并使用imtool进行分析,利用surf绘制R-B的三维灰度图(水果的灰度值明显在背景上方,为阈值分割提供便利),通过imhist发现R-B后的图像具有较好的双峰特性。使用最大类间方差法和人工选择法处理结果进行了比较,发现人工选择法效果较好。
二、程序代码
% 读入水果彩色图,观看其各通道灰度直方图和空间灰度分布,并对其进行分析确定最佳背景分割方法,为图像识别奠定基础
clear all;close all;clc
I=imread('.\fruit.jpg'); %读入彩色图像
Igray=rgb2gray(I); %彩色图像转灰度图像
Ir=I(:,:,1);Ig=I(:,:,2);Ib=I(:,:,3);
subplot(3,3,1),imshow(I),title('彩色图像');
subplot(3,3,2),imshow(Igray),title('彩色图像转灰度图像');
subplot(3,3,3),imshow(Ir),title('显示红色分量图像');
subplot(3,3,4),imshow(Ig),title('显示绿色分量图像');
subplot(3,3,5),imshow(Ib),title('显示蓝色分量图像');
subplot(3,3,6),imhist(Igray),title('显示灰度图像灰度直方图');
subplot(3,3,7),imhist(Ir),title('显示红色分量灰度直方图');
subplot(3,3,8),imhist(Ig),title('显示绿色分量灰度直方图');
subplot(3,3,9),imhist(Ib),title('显示蓝色分量灰度直方图');
imtool(I) %图像工具箱显示图像并进行分析
I_rb=Ir-Ib;
I_rb=imadjust(I_rb);%对比度增强
figure,imshow(I_rb);
figure,imhist(I_rb);%显示R-B直方图
imtool(I_rb);
figure,surf(double(Igray(1:4:end,1:4:end))),zlim([0 255]),title('Igray的三维表面灰度图');
colorbar
figure,surf(double(I_rb(1:4:end,1:4:end))),zlim([0 255]),title('R-B的三维表面灰度图');
colorbar
%通过上述图像分析,发现R-B图像具有很好的分割特性,因此采取以下图像分割方法
I_rb_BW=im2bw(I_rb,graythresh(I_rb));%采用最大类间方差法进行二值化
figure,imshow(I_rb_BW);
I_rb_BWfill=imfill(I_rb_BW,'holes');
figure,imshow(I_rb_BWfill);
Obj=uint8(I_rb_BWfill).*I;
%Obj=cat(3,uint8(I_rb_BWfill).*Ir,uint8(I_rb_BWfill).*Ig,uint8(I_rb_BWfill).*Ib);%MATLAB 2015a
figure,imshow(Obj),title('分割的水果彩色图像1');%采用最大类间方差法进行图像分割
I_rb_BW2=im2bw(I_rb,40/255);%采用指定阈值法进行二值化
figure,imshow(I_rb_BW2);
I_rb_BWfill2=imfill(I_rb_BW2,'holes');
figure,imshow(I_rb_BWfill2);
Obj2=uint8(I_rb_BWfill2).*I;
figure,imshow(Obj2),title('分割的水果彩色图像2');%通过图像分析,采用人工选择法进行图像分割
三、程序部分运行结果
四、总结
本次彩色图像分割,充分利用MATLAB中的surf、imtool和imhist各自特点对彩色图像进行分析,确定了最优分割方案,获得了较好分割效果。
五、原始水果图像
如果觉得本文章对大家今后的编程有帮助,请点赞和收藏。如有改进意见可以与我联系,谢谢!