本文内容:
本文将图片映射到ycbcr空间,使用阈值分割对图片中的三种水果进行了提取
所处理的图像:
映射到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
结果:
分类结果还有优化的余地,我们可以通过区域面积来消除噪声,就是给每个区域标记,计算面积,面积小于多少个像素就判定为噪声,之后就直接消除区域就行。(详情自己百度)