使用matlab对苹果,橘子,香蕉图像进行分割和判断

本文内容:

        本文将图片映射到ycbcr空间,使用阈值分割对图片中的三种水果进行了提取

所处理的图像:

OrangeBanana.jpg
OrangeBananaApple.jpg

映射到ycbcr空间进行阈值分割处理

function U()
    clear;
    clc;
    Ycbcr_Threshold_Fruit_Segmentation('OrangeBanana.jpg')
    Ycbcr_Threshold_Fruit_Segmentation('OrangeBananaApple.jpg')
end

% 使用ycbcr进行水果分割,分割出水果的位置
function Ycbcr_Threshold_Fruit_Segmentation(s)
    [img,map] = imread(s);  % 读取文件
    figure('Name',s);  % 开一个新的窗口
    subplot(2,5,1),imshow(img),title('原图');  % 显示原图
    img_ycbcr =rgb2ycbcr(img);
    subplot(2,5,2),imshow(img_ycbcr),title('ycbcr用RGB显示');  % 显示ycbcr
    subplot(2,5,3),imshow(img_ycbcr(:,:,1),[]),title('ycbcr_1');
    subplot(2,5,4),imshow(img_ycbcr(:,:,2),[]),title('ycbcr_2');
    subplot(2,5,5),imshow(img_ycbcr(:,:,3),[]),title('ycbcr_3');
    img_1 = 1-im2bw(img_ycbcr(:,:,2),0.35);    % 图像分割出橘子和香蕉
    img_2 = im2bw(img_ycbcr(:,:,3),0.65);    % 图像分割出苹果和橘子
    subplot(2,5,6),imshow(img_1),title('分割出橘子和香蕉');  % 显示分割出橘子和香蕉
    subplot(2,5,7),imshow(img_2),title('分割出苹果和橘子');  % 显示分割出苹果和橘子
    apple = (img_2-img_1)>0;
    orange = (img_1+img_2-1)>0;
    banana = (img_1-img_2)>0;
    apple = Otimize(apple);
    orange = Otimize(orange);
    banana = Otimize(banana);
    subplot(2,5,8),imshow(apple),title('苹果');
    subplot(2,5,9),imshow(orange),title('橘子');
    subplot(2,5,10),imshow(banana),title('香蕉');
end

% 使用腐蚀和膨胀优化图像
function img_g = Otimize(img_g)
    x = ones(5,5);  % 对分割后结果进行腐蚀膨胀去噪
    img_g = imdilate(img_g,x);%膨胀操作
    img_g = imerode(img_g,x);%腐蚀操作
    img_g = imerode(img_g,x);%腐蚀操作
    img_g = imdilate(img_g,x);%膨胀操作
    img_g = ~bwareaopen(~img_g,2000);   % 删除物品中间黑色的孔洞
    img_g = bwareaopen(img_g,2000);   % 删除面积小的区域
end

结果:

分类结果还有优化的余地,我们可以通过区域面积来消除噪声,就是给每个区域标记,计算面积,面积小于多少个像素就判定为噪声,之后就直接消除区域就行。(详情自己百度)

猜你喜欢

转载自blog.csdn.net/weixin_58196051/article/details/129799303