matlab处理亮度不均匀,校正亮度不均匀问题并分析前景对象

预处理图像

将图像读入工作区。

I = imread('rice.png');

imshow(I)

80f568049e41290bbc1e03b803cd1880.png

图像中心的背景亮度比底部亮度高。预处理图像,使背景亮度更加均匀。

第一步,使用形态学开运算删除所有前景(米粒)。开运算会删除无法完全包含结构元素的小对象。定义半径为 15 的盘形结构元素,它完全可放入一粒米内。

se = strel('disk',15)

se =

strel is a disk shaped structuring element with properties:

Neighborhood: [29x29 logical]

Dimensionality: 2

要执行形态学开运算,请使用具有结构元素的 imopen。

background = imopen(I,se);

imshow(background)

0b39a301daa2661b2cd7292582e7f062.png

从原始图像 I 中减去背景逼近图像 background,然后查看生成的图像。从原始图像中减去调整后的背景图像后,生成的图像具有均匀的背景,但现在对于分析来说有点暗。

I2 = I - background;

imshow(I2)

06f18947062736670e9c84ffb46f9bbe.png

使用 imadjust,通过在低强度和高强度下都对 1% 的数据进行饱和处理,并通过拉伸强度值以填充 uint8 动态范围,来提高处理后的图像 I2 的对比度。

I3 = imadjust(I2);

imshow(I3)

81a7b9d30fcfd0b7a581b789d60ab233.png

请注意,前面的两个步骤可以由使用 imtophat 的一个步骤来代替完成,后者先计算形态学开运算,然后从原始图像中减去它。

I2 = imtophat(I,strel('disk',15));

创建处理后的图像的二值版本,以便使用工具箱函数进行分析。使用 imbinarize 函数将灰度图像转换为二值图像。使用 bwareaopen 函数去除图像中的背景噪声。

bw = imbinarize(I3);

bw = bwareaopen(bw,50);

imshow(bw)

c1bf1f8d97631bbcc8ca2bcb98d443f6.png

识别图像中的对象

现在您已创建原始图像的二值版本,您可以对图像中的对象执行分析。

在二值图像中查找所有连通分量(对象)。结果的准确度取决于对象的大小、连通性参数(4、8 或任意值),以及是否有相互接触的对象(在这种情况下,它们可能被标记为一个对象)。二值图像 bw 中的一些米粒相互接触。

cc = bwconncomp(bw,4)

cc = struct with fields:

Connectivity: 4

ImageSize: [256 256]

NumObjects: 95

PixelIdxList: {1x95 cell}

cc.NumObjects

ans = 95

查看图像中标记为 50 的米粒。

grain = false(size(bw));

grain(cc.PixelIdxList{50}) = true;

imshow(grain)

87e3593b885e01a142416d8f7fe1d791.png

通过创建标签矩阵,然后将其显示为伪彩色索引图像,可视化图像中的所有连通分量。

使用 labelmatrix 根据 bwconncomp 的输出创建标签矩阵。请注意,labelmatrix 将标签矩阵存储在依对象数量得出的最小数值类中。

labeled = labelmatrix(cc);

whos labeled

Name Size Bytes Class Attributes

labeled 256x256 65536 uint8

使用 label2rgb 选择颜色图、背景颜色以及标签矩阵中的对象如何映射到颜色图中的颜色。在伪彩色图像中,用于标识标签矩阵中每个对象的标签映射到相关联的颜色图矩阵中的不同颜色。

RGB_label = label2rgb(labeled,'spring','c','shuffle');

imshow(RGB_label)

338d9d55f48e3d2f9174eee800254193.png

计算基于面积的统计量

使用 regionprops 计算图像中每个对象的面积。每个米粒均为 cc 结构体中的一个连通分量。

graindata = regionprops(cc,'basic')

graindata=95×1 struct array with fields:

Area

Centroid

BoundingBox

创建新向量 grain_areas,它保存每个米粒的面积测量值。

grain_areas = [graindata.Area];

计算第 50 个分量的面积。

grain_areas(50)

ans = 194

找到并显示面积最小的米粒。

[min_area, idx] = min(grain_areas)

min_area = 61

idx = 16

grain = false(size(bw));

grain(cc.PixelIdxList{idx}) = true;

imshow(grain)

d37d0d565c26d4874c3eab1baa268fb7.png

使用 histogram 命令创建米粒面积的直方图。

histogram(grain_areas)

title('Histogram of Rice Grain Area')

fe979832850fcdb29d509fbb23eedb1a.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[CentOS] 打造vim环境

安装vim yum install vim-enhanced 安装git rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpmyum install git 安装bundle插件 git clone https://github.com/gmarik/vundle.git /data/vim/bundle/vundle 配置vim vim /etc/vimrc 在文件…

python接活网站_python能自己接活_python开发接活 - CSDN

Python远程连接oracle数据库概要1。Python连接数据库代码:def oracledbConnect(自我):试题:康涅狄格州 cx_ (\u201Cmdm\u201D、\u201Cnetqin123\u201D,\u201C: 1521 \/敏捷\u201D)光标 ()(\u201Cselect * from t_user \直接安装oracle数据库客户端:安装win32_11gR2_。4. 安装in…

python调用metasploit自动攻击_Python实现远程调用MetaSploit的方法

本文较为详细的讲述了Python实现远程调用MetaSploit的方法,对Python的学习来说有很好的参考价值。具体实现方法如下:(1)安装Python的msgpack类库,MSF官方文档中的数据序列化标准就是参照msgpack。rootkali:~# apt-get install python-setupto…

oracle 02085,OracleDBLink创建和维护以及ORA-02085解决办法

今天业务需要,要跨库查询Oracle数据,于是想到了dblink, 下面一一细说,Oracle DBLink。今天业务需要,要跨库查询Oracle数据,于是想到了dblink, 下面一一细说,,Oracle DBLink。首先Oracle DBLink …

C#单例模式详解

C#要实现单例模式必须要有以下三点: 声明私有静态成员、私有化构造函数、静态函数返回实例。 private static GameManager s_GameManagernull;private GameManager(){}public static GetInstance(){if(!s_GameManager){s_GameManagernew GameManager();}return s_Ga…

python的使用说明_Python 的基本使用说明

#-*- coding: utf-8 -*-#/usr/bin/env python Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。 解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #codingutf-8 就行了 #导入模块 cnf#imp…

notepad python设置_NotePad++上配置Python

1.安装好python以及notepad2.打开notepad点击"运行"菜单->"运行"按钮(或者直接按F5)在弹出的窗口内输入以下命令(命令解释见文尾)后点击“保存”:cmd /k cd /d "$(CURRENT_DIRECTORY)" & python "$(FULL_CURRENT_PATH)&q…

oracle将字段nullable设为Y,从DB模型中消除NULLable列的选项(为了避免SQL的三值逻辑)?...

不久之前,我一直在阅读SQL and Relational Theory by C. J. Date一书.作者因批评sql的三值逻辑(3VL)而闻名.1)作者强调了为什么在sql中应该避免使用3VL,但他没有概述如果不允许使用可空列的数据库模型的样子.我已经考虑了一下,并提出了以下解决方案.如果我错过了其他设计方案,我…

在Delphi中使用indy SMTP发送gmail邮件[转]

在Delphi中使用indy SMTP发送gmail邮件[转] 2012-01-01 22:44:30| 分类: Delphi | 标签: |举报 |字号大中小 订阅 在Delphi中发送email很简单,发送ssl方式的gmail邮件也很简单,只要在使用的idSMTP上附加一个TIdSSLIOHandlerS…

LeetCode 1797. 设计一个验证系统(map)

文章目录1. 题目2. 解题1. 题目 你需要设计一个包含验证码的验证系统。 每一次验证中,用户会收到一个新的验证码,这个验证码在 currentTime 时刻之后 timeToLive 秒过期。 如果验证码被更新了,那么它会在 currentTime (可能与之前…

git add remote_使用git管理嵌入式软件版本

点击上方蓝字关注我哦~你现在的Keil工程的版本控制是怎么管理的?可能有些人的做法是发布一个版本软件后将代码打一个包保存起来,作为此版本的备份。有一种常见的情况,当开始一项新功能的开发,并且最终的效果不理想老板…

xshell 6 连接debian系统拒绝了密码_Xshell中操作Linux的常用命令,你知道几个?

作为IT人员,想必都知道Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Xshell作为专业的终端模拟器,可以用来登录Linux,从而通过命令来控制Linux系统&…

PHP允许输入负数,php exec在linux中返回值不能为负数

php exec在linux中返回值不能为负数有需要的朋友可参考一下。我们先来了解一下关于exec函数的使用方法exec()原型: 代码如下复制代码string exec (string command [, string array [, int return_var]])exec ()函数与system()类似,也执行给定的命令&…

自我祝贺

博客火了这么久,微博火了这么久。这段时间总感觉自己要做点什么。从04年伊始的马上有钱,到04年结束的马拉个币。我终于觉得,想要和大家一起分享,我这马年的苦逼的工作。第一篇博客想了好久,该写点什么,应该…

LeetCode 1798. 你能构造出连续值的最大数目

文章目录1. 题目2. 解题1. 题目 给你一个长度为 n 的整数数组 coins ,它代表你拥有的 n 个硬币。 第 i 个硬币的值为 coins[i] 。如果你从这些硬币中选出一部分硬币,它们的和为 x ,那么称,你可以 构造 出 x 。 请返回从 0 开始&…

分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法学习笔记:图...

图:图结构区别于线性结构和树型结构,区别可见下图逻辑上的图(graph)结构由顶点(vertex)和边(edge)组成。一个图结构G包含顶点集合V和边集合E,任何两个顶点之间可以有一个边表示两者的关系。对于一个存在的G,V不可以为空集&#xf…

人类附身机器人获得永生_脑机接口先驱尼古莱利斯:人类无法实现数字永生

科幻作品中的意念控制、心灵感应,甚至数字“永生”,会通过脑机接口技术得以实现吗?脑机接口技术先驱者之一、杜克大学神经工程学教授米格尔尼古莱利斯(Miguel Nicolelis)表示,不可能。近日,尼古莱利斯在巴西家中与北京…

linux内核分成如下五个子系统,linux内核主要由5个子系统 Linux内核由哪几个子系统组成?...

1, Linux内核由哪几个子系统组成?Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时&…

HDU 1213 How Many Tables【并查集】

解题思路:和畅通工程类似,问最后还剩下几个不连通的区域。 How Many Tables Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15086 Accepted Submission(s): 7364 Problem Description…

LeetCode 1799. N 次操作后的最大分数和(回溯 / 状态压缩DP)

文章目录1. 题目2. 解题2.1 错误解2.2 回溯超时解2.3 回溯通过2.4 状态压缩DP1. 题目 给你 nums ,它是一个大小为 2 * n 的正整数数组。 你必须对这个数组执行 n 次操作。 在第 i 次操作时(操作编号从 1 开始),你需要&#xff1…