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

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

一、引言

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

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3