(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://uudwc.com/A/oD4z