图像分割(四)---(图像显示、灰度直方图和三维灰度图综合分析选取最佳分割方法)

本文主要是介绍图像分割(四)---(图像显示、灰度直方图和三维灰度图综合分析选取最佳分割方法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、引言

       对彩色图像进行分割的一种常用方法,是先把彩色图像转灰度图像,然后再选择合适的阈值进行二值分割。但有时彩色图像转灰度图像后不具有典型的双峰特性,二值分割效果不好。本文章提出一种确定彩色图像分割方法的新思路。首先读入一幅彩色图像fruit.jpg,然后对其各通道的灰度直方图进行分析,并使用imtool进行分析,利用surf绘制R-B的三维灰度图(水果的灰度值明显在背景上方,为阈值分割提供便利),通过imhist发现R-B后的图像具有较好的双峰特性。使用最大类间方差法和人工选择法处理结果进行了比较,发现人工选择法效果较好。

二、程序代码

% 读入水果彩色图,观看其各通道灰度直方图和空间灰度分布,并对其进行分析确定最佳背景分割方法,为图像识别奠定基础

clear all;close all;clc

I=imread('.\fruit.jpg');   %读入彩色图像

Igray=rgb2gray(I);          %彩色图像转灰度图像

Ir=I(:,:,1);Ig=I(:,:,2);Ib=I(:,:,3);

subplot(3,3,1),imshow(I),title('彩色图像');

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

subplot(3,3,3),imshow(Ir),title('显示红色分量图像');

subplot(3,3,4),imshow(Ig),title('显示绿色分量图像');

subplot(3,3,5),imshow(Ib),title('显示蓝色分量图像');

subplot(3,3,6),imhist(Igray),title('显示灰度图像灰度直方图');

subplot(3,3,7),imhist(Ir),title('显示红色分量灰度直方图');

subplot(3,3,8),imhist(Ig),title('显示绿色分量灰度直方图');

subplot(3,3,9),imhist(Ib),title('显示蓝色分量灰度直方图');

imtool(I)   %图像工具箱显示图像并进行分析

I_rb=Ir-Ib;

I_rb=imadjust(I_rb);%对比度增强

figure,imshow(I_rb);

figure,imhist(I_rb);%显示R-B直方图

imtool(I_rb);

figure,surf(double(Igray(1:4:end,1:4:end))),zlim([0 255]),title('Igray的三维表面灰度图');

colorbar

figure,surf(double(I_rb(1:4:end,1:4:end))),zlim([0 255]),title('R-B的三维表面灰度图');

colorbar

%通过上述图像分析,发现R-B图像具有很好的分割特性,因此采取以下图像分割方法

I_rb_BW=im2bw(I_rb,graythresh(I_rb));%采用最大类间方差法进行二值化

figure,imshow(I_rb_BW);

I_rb_BWfill=imfill(I_rb_BW,'holes');

figure,imshow(I_rb_BWfill);

Obj=uint8(I_rb_BWfill).*I;

%Obj=cat(3,uint8(I_rb_BWfill).*Ir,uint8(I_rb_BWfill).*Ig,uint8(I_rb_BWfill).*Ib);%MATLAB 2015a

figure,imshow(Obj),title('分割的水果彩色图像1');%采用最大类间方差法进行图像分割

I_rb_BW2=im2bw(I_rb,40/255);%采用指定阈值法进行二值化

figure,imshow(I_rb_BW2);

I_rb_BWfill2=imfill(I_rb_BW2,'holes');

figure,imshow(I_rb_BWfill2);

Obj2=uint8(I_rb_BWfill2).*I;

figure,imshow(Obj2),title('分割的水果彩色图像2');%通过图像分析,采用人工选择法进行图像分割

 三、程序部分运行结果

四、总结

    本次彩色图像分割,充分利用MATLAB中的surf、imtool和imhist各自特点对彩色图像进行分析,确定了最优分割方案,获得了较好分割效果。

五、原始水果图像

 如果觉得本文章对大家今后的编程有帮助,请点赞和收藏。如有改进意见可以与我联系,谢谢!

这篇关于图像分割(四)---(图像显示、灰度直方图和三维灰度图综合分析选取最佳分割方法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085346

相关文章

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三