• 图像分割(二)——低照度下自然场景下图像分割的一种新方法


    一天傍晚,在景观河散步,看到景观河旁边雕塑鸭子,就用手机拍摄下来,但由于是晚上光线不是太好,且雕塑下面的地板有条纹和阴影。想着尝试用传统的数字图像处理方法把鸭子从自然场景中提取出来。

    读入低照度下图像,然后把鸭子从背景分割出来。算法主要步骤:1.读入彩色图像;2.图像裁剪;3.彩色图像转灰度图像;4.对比度拉伸;5.图像二值化;6.数学形态学运算处理后的二值图像;7.边缘检测图像;8.边缘检测和阈值分割相结合进行目标分割;9.边缘检测和阈值分割相结合进行目标分割。结果显示,上述方法取得了较好的分割效果。

    close all;% 关闭所有的图像窗口

    clc;% 清除当前command区域的命令

    imtool close all;%关闭imtool窗口

    I0 = imread('duck1.jpg');

    I = imcrop(I0,[190 170 1400 1000]);%图像裁剪

    I2=rgb2gray(I);

    figure,imshow(I2);

    figure,imhist(I2);

    I2Adjust=imadjust(I2); %对比度拉伸

    figure,imshow(I2Adjust);

    figure,imhist(I2Adjust);

    imtool(I2Adjust);

    I3=im2bw(I2Adjust,100/255); %图像二值化,阈值选择很关键

    figure,imshow(I3);

    I_4=~I3;

    figure,imshow(I_4);

    I_4=imfill(I_4,'holes');figure,imshow(I_4);

    figure,imshow(I_4);

    I_5=imclose(I_4,strel('disk',4)); %利用开运算连接物体,结构元素的形状和大小选择很关键

    figure,imshow(I_5);

    I_5=imopen(I_5,strel('disk',2));

    figure,imshow(I_5);

    I_6=bwareaopen(I_5,2100);

    figure,imshow(I_6);

    I_8=edge(I2,'sobel','vertical');%边缘检测,把原始图像中的水平线去掉

    %I_8=edge(I2,'sobel');

    figure,imshow(I_8);

    I_9=I_6+I_8;

    figure,imshow(I_9);%利用边缘检测和阈值分割相结合进行目标分割

    I_10=imclose(I_9,strel('disk',9));

    figure,imshow(I_10);

    I_11=bwareaopen(I_10,500);

    figure,imshow(I_11);

    I_12=imfill(I_11,'holes');

    figure,imshow(I_12);

    I_13=imclose(I_12,strel('disk',18));

    figure,imshow(I_13);

    I_14=imfill(I_13,'holes');

    figure,imshow(I_14);

    I_15=imopen(I_14,strel('disk',10));

    figure,imshow(I_15);

    I_16=uint8(I_15).*I;

    figure,imshow(I_16),title('将鸭子从背景分割中分割出来');

    [L,num] = bwlabel(I_15);

    disp('鸭子的数量')

    num

    figure('Name','低照度环境下的图像背景分割一种新方法','NumberTitle','off');

    subplot(3,3,1),imshow(I0),title('显示原始图像');

    subplot(3,3,2),imshow(I),title('图像裁剪');

    subplot(3,3,3),imshow(I2),title('彩色图像转灰度图像');

    subplot(3,3,4),imshow(I2Adjust),title('对比度拉伸');

    subplot(3,3,5),imshow(I3),title('图像二值化');

    subplot(3,3,6),imshow(I_6),title('数学形态学运算处理后的二值图像');

    subplot(3,3,7),imshow(I_8),title('边缘检测图像');

    subplot(3,3,8),imshow(I_9),title('边缘检测和阈值分割相结合进行目标分割');

    subplot(3,3,9),imshow(I_15),title('边缘检测和阈值分割相结合进行目标分割');

    %程序在MATLAB 2018a 调试通过

    原始图像如下:

       欢迎各位网友对上面算法的不足之处提出改进意见,谢谢大家!

  • 相关阅读:
    Python打包成exe,文件太大问题解决办法
    网络无法分配 IP 地址有什么原因?
    shutdown 和close的区别
    win32:第一个窗口程序-应用程序入口点(part.6)
    内置MOS升压芯片FP6293 双节锂升压8.4V/1A
    qt 画多边形,可以拖拽
    【PowerQuery】Excel和PowerBI的PowerQuery 数据刷新
    7.21 SpringBoot项目实战【图书借阅】并发最佳实践:细粒度Key锁、数据库乐观锁、synchronized、ReentrantLock
    Java基础知识面试题(二)(英语答案)
    Idea工作中常用插件
  • 原文地址:https://blog.csdn.net/xrgs_shz/article/details/139717539