需求:提取出图像特定黄瓜部分并得到其rgb三原色;
步骤:
- 首先确定黄瓜大概范围,将其它设置为背景颜色,也就是饱和度为0;
- 得到此时直方图,因为黄瓜是绿色的(所以它的g的饱和度较高,背景色的饱和度较底),根据直方图确定适当饱和度去除噪音颜色;
clear; % 清空
img=imread('C:\Users\EmotionaC\Desktop\Fig91.bmp');
%导入图像
img=uint8(img);%转换成uint8数据类型
img1=img;
[m,n,d]=size(img); %计算图像像素
figure('name','原始图像');%原始图像
title('原始水果图像');
imshow(img);
% 三原色直方图
figure('name','原图片三原色直方图');
title('原水果图片三原色直方图');
subplot(1,3,1);
imhist(img(:,:,1));title('R');
subplot(1,3,2);
imhist(img(:,:,2));title('G');
subplot(1,3,3);
imhist(img(:,:,3));title('B');
%将图片中除了黄瓜的部分饱和度都变成0,即变成背景黑;
for i=1:m
for j=1:n
if(i>(5*m)/10 || i<(3*m)/10) %此点需要尝试以便找到最佳裁剪点
img1(i,j,1)=0;
img1(i,j,2)=0;
img1(i,j,3)=0;
end
end
end
figure('name','初步确定黄瓜范围图片');
imshow( img1);title('初步确定黄瓜范围图片');
% 得到此时范围三原色直方图
figure('name','初步黄瓜范围三原色直方图');
subplot(1,3,1);
imhist(img1(:,:,1));title('R');
subplot(1,3,2);
imhist(img1(:,:,2));title('G');
subplot(1,3,3);
imhist(img1(:,:,3));title('B');
%将图片中除了黄瓜的部分饱和度都变成0;
for i=1:m
for j=1:n
if(img1(i,j,2)<30)
% 根据上面的直方图,去掉绿色饱和度较低的像素点的背景颜色;
img1(i,j,1)=0;
img1(i,j,2)=0;
img1(i,j,3)=0;
end
end
end
figure('name','黄瓜最终确定图');
imshow( img1);title('黄瓜最终确定图');
% 三原色直方图
figure('name','黄瓜最终三原色直方图');
subplot(1,3,1);
imhist(img1(:,:,1));title('R');
subplot(1,3,2);
imhist(img1(:,:,2));title('G');
subplot(1,3,3);
imhist(img1(:,:,3));title('B');
|
请发表评论