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

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

一、引言

       对彩色图像进行分割的一种常用方法,是先把彩色图像转灰度图像,然后再选择合适的阈值进行二值分割。但有时彩色图像转灰度图像后不具有典型的双峰特性,二值分割效果不好。本文章提出一种确定彩色图像分割方法的新思路。首先读入一幅彩色图像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

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊