主要内容

纠正不均匀照明,分析前景对象

这个例子展示了如何增强图像,作为分析前的预处理步骤。在本例中,您纠正了不均匀的背景照明,并将图像转换为二值图像,以方便识别前景对象(单个米粒)。然后,您可以分析对象,例如找到每粒大米的面积,并可以计算图像中所有对象的统计数据。

预处理图像

将图像读入工作区。

我= imread (“rice.png”);imshow(我)

图中包含一个轴对象。axis对象包含一个image类型的对象。

图像中心的背景照明比底部更亮。对图像进行预处理,使背景光照更加均匀。

作为第一步,使用形态开口去除所有前景(米粒)。打开操作删除不能完全包含结构元素的小对象。定义一个半径为15的圆盘状结构元素,它完全适合于一粒大米。

se = strel (“磁盘”15)
se = strel是一个具有以下属性的圆盘状结构元素

要执行形态打开,请使用imopen构造元素。

背景= imopen(我,se);imshow(背景)

图中包含一个轴对象。axis对象包含一个image类型的对象。

减去背景近似图像,背景,从原始图像,,并查看生成的图像。从原始图像中减去调整后的背景图像后,得到的图像有一个统一的背景,但现在分析时有点暗。

I2 = I - background;imshow (I2)

图中包含一个轴对象。axis对象包含一个image类型的对象。

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

I3 = imadjust (I2);imshow (I3)

图中包含一个轴对象。axis对象包含一个image类型的对象。

注意,前面的两个步骤可以用一个步骤代替imtophat它首先计算形态开口,然后从原始图像中减去它。

I2 = imtophat(我strel(“磁盘”,15));

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

bw = imbinarize (I3);bw = bwareaopen (bw, 50);imshow (bw)

图中包含一个轴对象。axis对象包含一个image类型的对象。

识别图像中的物体

既然已经创建了原始图像的二进制版本,就可以对图像中的对象进行分析了。

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

cc = bwconncomp (bw, 4)
cc =结构体字段:连接:4 ImageSize: [256 256] NumObjects: 95 PixelIdxList: {1x95 cell}
cc.NumObjects
ans = 95

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

粮食= false(大小(bw));谷物(cc.PixelIdxList {50}) = true;imshow(粮食)

图中包含一个轴对象。axis对象包含一个image类型的对象。

通过创建一个标签矩阵来可视化图像中所有连接的组件,然后将其显示为伪颜色索引图像。

使用labelmatrix的输出创建一个标签矩阵bwconncomp.请注意,labelmatrix将标签矩阵存储在对象数量所需的最小数值类中。

标签= labelmatrix (cc);谁标签
名称大小字节类属性标记256x256 65536 uint8

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

RGB_label = label2rgb(标签,“春天”“c”“洗牌”);imshow (RGB_label)

图中包含一个轴对象。axis对象包含一个image类型的对象。

计算成立统计

使用。计算图像中每个对象的面积regionprops.每一粒米都是一个相互连接的组成部分cc结构。

graindata = regionprops (cc、“基本”
graindata =95×1带有字段的结构数组:区域质心BoundingBox

创建一个新的矢量grain_areas,用来测量每一粒谷物的面积。

grain_areas = [graindata.Area];

求第50分量的面积。

grain_areas (50)
ans = 194

找到并显示面积最小的纹理。

[min_area, idx] = min(grain_area)
min_area = 61
idx = 16
粮食= false(大小(bw));谷物(cc.PixelIdxList {idx}) = true;imshow(粮食)

图中包含一个轴对象。axis对象包含一个image类型的对象。

使用柱状图命令创建米粒区域的直方图。

直方图(grain_areas)标题(“米粒面积直方图”

图中包含一个轴对象。标题为“稻米区域直方图”的轴对象包含一个直方图类型对象。

另请参阅

|||||||||