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

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

一、引言

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

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据