matlab-对图像进行特定部分提取并得到rgb三原色(matlab实现)

需求:提取出图像特定黄瓜部分并得到其rgb三原色;

步骤:

  1. 首先确定黄瓜大概范围,将其它设置为背景颜色,也就是饱和度为0;
  2. 得到此时直方图,因为黄瓜是绿色的(所以它的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');

%将图片中除了黄瓜的部分饱和度都变成0for 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');

  • 原始图像:

matlab-对图像进行特定部分提取并得到rgb三原色(matlab实现)_第1张图片

  • 原始图像三原色直方图:

matlab-对图像进行特定部分提取并得到rgb三原色(matlab实现)_第2张图片

  • 初步确定黄瓜范围图像:

matlab-对图像进行特定部分提取并得到rgb三原色(matlab实现)_第3张图片

  • 初步黄瓜范围三原色直方图:

matlab-对图像进行特定部分提取并得到rgb三原色(matlab实现)_第4张图片

  • 最终黄瓜图像:

matlab-对图像进行特定部分提取并得到rgb三原色(matlab实现)_第5张图片

  • 最终黄瓜三原色直方图:
    matlab-对图像进行特定部分提取并得到rgb三原色(matlab实现)_第6张图片

  • 其他信息:

matlab-对图像进行特定部分提取并得到rgb三原色(matlab实现)_第7张图片

感觉文章不错的同学麻烦动动小手点点关注订阅呗,您的肯定是对我持续更新最大的支持!

你可能感兴趣的:(matlab)