MATLAB红苹果提取(颜色分割)

(1)将已知图像进行消噪处理

(2)对彩色图像进行目标和背景分析

(3)通过颜色将图像进行分割

(4)进行形态学处理,提取目标

看了一下这几个博客,重要的是要得到的就是二值化的分割出来的主体图像,剩下提取的步骤其实不算难。可以使用图像相乘,或者颜色叠加。

用 matlab 对图像进行局部提取

试了一下使用OTSU进行分割,效果不太理想。直方图也比较平均,无法提取出来。

区域生长分割,效果依旧很差。

​由于给定的图片主要分为红色的苹果和绿色的叶子部分,所以可以基于颜色进行分割。

老师给的代码是K均值聚类算法,不明觉厉。

clear,clc,close all;
Image=imread('fruit.jpg');
subplot(121);imshow(Image),title('原图像'); 
hsv=rgb2hsv(Image);
h=hsv(:,:,1);
h(h>330/360)=0;
[N,M]=size(h);
training=h(:);
startdata = [0;60/360;120/360;180/360;240/360;300/360];
[IDX,C]= kmeans(training,6,'Start',startdata);
idbw = (IDX == 1);
template = reshape(idbw, size(h));
subplot(122);imshow(template),title('分割后的图像');
imwrite(template,'clusterseg.jpg');

由于没有装工具箱,我使用不了kmeans函数,所以研究了一下,使用了基于RGB分量分割,对应的红色R=1,B,G参数自己调整,方法在这篇帖子。

matlab 对颜色差异明显的目标 实现图像分割

主要使用了方法2得到二值化后的图像,然后颜色叠加部分采用了这个链接中的方法,将得到的二值图像分别和原图提取出来的RGB分量相乘。在灰度处理的时候添加了填充洞和删掉小块噪点的函数,使图像更加完整

clear all

pic1=imread('apple.png');
%分别提取RGB三个通道(也就是三个二维矩阵)
R=pic1(:,:,1);
G=pic1(:,:,2);
B=pic1(:,:,3);
%获取图像的矩阵
[y,x,z]=size(pic1);

 
%使用灰度整合二值化方法
%循环每个像素
for i=1:x
    for j=1:y
        %改变灰度值,系数可以自己调整
        pic2(j,i)=(1*R(j,i)-0.3*G(j,i)-0.3*B(j,i)); 
    end
end

t=graythresh(pic2);             %确定二值化阈值

pic3=im2bw(pic2,t);             %二值化

pic3=imfill(pic3,'holes');      %填充洞

pic3=bwareaopen(pic3,10);       %删掉一些小块噪点

%由于二值图元素的类型都是 logical型(逻辑型),在进行运算处理时不符合要求,所以转为 uint8
a1=im2uint8(pic3)/255;

R1=R.*a1;               %各个通道的矩阵乘以二值图,中心的蝴蝶矩阵数值不变,背景变为0
G1=G.*a1;
B1=B.*a1;

b1(:,:,1)=R1;           %三个通道叠加,组成一个三维的RGB图
b1(:,:,2)=G1;
b1(:,:,3)=B1;

%显示结果环节
figure
subplot(1,2,1),imshow(pic1),title("原图");
subplot(1,2,2),imshow(b1),title("处理结果");

相比起来效果还是差了点,苹果底部反射叶子的部分因为有绿色所以不是很精确。

当然红色玫瑰也ok

文章来源地址https://uudwc.com/A/oD4z

原文地址:https://blog.csdn.net/qq_59343209/article/details/127934269

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月13日 12:14
下一篇 2023年06月13日 12:14