利用Matlab,采用超绿因子分割玉米苗图像

本文内容:

        本文采用超绿因子对玉米苗图像进行了图像分割,并采用腐蚀膨胀(图像的开运算和闭运算)进行了去噪处理,从而得出了玉米苗较为准确的位置。

        超绿因子:在RGB色彩空间中即(2G-R-B)/(R+G+B),可以很好的分割出图像中绿色的部分,常用于分割植物。也称绿色因子,超绿特征等。

实验所用图片:

sjtp晴天时的玉米苗.JPG
sjtp晴天时灰烬中的玉米苗.JPG
sjtp晴天时麦秸秆中的玉米苗.JPG
sjtp阴天时的玉米苗.JPG

 实验代码如下:

function U()
    clear;
    clc;
    Corn_Seedling_Extraction('sjtp晴天时的玉米苗.JPG');
    Corn_Seedling_Extraction('sjtp晴天时灰烬中的玉米苗.JPG');
    Corn_Seedling_Extraction('sjtp晴天时麦秸秆中的玉米苗.JPG');
    Corn_Seedling_Extraction('sjtp阴天时的玉米苗.JPG');
end

% 玉米幼苗提取,采用超绿因子,带显示,输入s为文件名
function Corn_Seedling_Extraction(s)
    [img,map] = imread(s);  % 读取文件
    figure('Name',s);  % 开一个新的窗口
    subplot(2,4,1),imshow(img),title('原图');  % 显示原图
    subplot(2,4,2),imshow(img(:,:,1)),title('R');  % 显示R
    subplot(2,4,3),imshow(img(:,:,2)),title('G');  % 显示G
    subplot(2,4,4),imshow(img(:,:,3)),title('B');  % 显示B
    img = double(img);
    img_g = (2*img(:,:,2)-img(:,:,1)-img(:,:,3))./(img(:,:,1)+img(:,:,2)+img(:,:,3));
    subplot(2,4,5),imshow(img_g,[]),title('超绿因子运算结果');  % 显示超绿因子运算结果
    % img_g = im2bw(img_g,graythresh(img_g));    % 图像分割使用最大类间方差法找到阈值
    img_g = im2bw(img_g,0.1);   % 最大类间方差法结果不太好,固定阈值反而效果不错
    subplot(2,4,6),imshow(img_g),title('超绿因子分割结果');  % 显示超绿因子分割结果
    x = ones(5,5);  % 对分割后结果进行腐蚀膨胀去噪
    img_g = imerode(img_g,x);%腐蚀操作
    img_g = imdilate(img_g,x);%膨胀操作
    subplot(2,4,7),imshow(img_g),title('腐蚀膨胀去噪结果');  % 显示腐蚀膨胀去噪结果
    img_g = img_g/255;
    img_x = cat(3,img(:,:,1).*img_g,img(:,:,2).*img_g,img(:,:,3).*img_g);
    subplot(2,4,8),imshow(img_x),title('分割出的玉米苗');  % 显示分割出的玉米苗
end

实验结果:

 

猜你喜欢

转载自blog.csdn.net/weixin_58196051/article/details/129798049
今日推荐