正确的非均匀照明和分析前景对象
这个例子展示了如何提高图像预处理步骤之前的分析。在本例中,您的非均匀背景照明和图像转换成一个二进制图像使它容易识别前景对象(个人粒大米)。然后可以分析对象,如发现每粒米的区域,你可以计算图像中所有对象的统计数据。
预处理图像
读一个图像到工作区中。
我= imread (“rice.png”);imshow(我)
背景照明亮度比底部中心的形象。预处理的图像背景照明更加统一。
作为第一步,删除所有的前台(米粒)使用形态。打开操作删除小不能完全包含结构化元素的对象。定义一个盘状结构元素的半径15,完全适合在一个米粒。
se = strel (“磁盘”15)
se = strel是一个圆盘形状的结构元素和属性:社区:[29 x29逻辑]维度:2
执行形态,使用imopen
与结构元素。
背景= imopen(我,se);imshow(背景)
减去背景近似图像,背景
从原始图像,我
,并查看生成的图像。从原始图像减去背景图像调整后,产生的图像有一个统一的背景,但现在有点黑暗进行分析。
I2 = I -背景;imshow (I2)
使用imadjust
增加对比度的图像处理I2
通过饱和1%的数据在低和高强度和拉伸强度值来填补uint8
动态范围。
I3 = imadjust (I2);imshow (I3)
注意前两个步骤可以被单个步骤使用imtophat
首先计算出形态开放,然后减去它的原始图像。
I2 = imtophat(我strel(“磁盘”,15));
创建一个二进制版本的图像处理,这样你就可以使用工具箱函数进行分析。使用imbinarize
函数将灰度图像转换成一个二进制图像。去除背景噪声的图像bwareaopen
函数。
bw = imbinarize (I3);bw = bwareaopen (bw, 50);imshow (bw)
识别图像中的对象
现在,您已经创建了一个二进制版本的原始图像可以执行的分析图像中的对象。
找到所有的连接组件(对象)的二进制图像。你的结果的准确性取决于物体的大小,连接参数(4 8或任意),以及是否接触的任何对象(在这种情况下,他们可以被贴上一个对象)。一些米粒的二进制图像bw
是感人。
cc = bwconncomp (bw, 4)
cc =结构体字段:连通性:4图象尺寸(256 256):NumObjects: 95 PixelIdxList: {1} x95细胞
cc.NumObjects
ans = 95
查看标记的水稻粒50图像中。
粮食= false(大小(bw));谷物(cc.PixelIdxList {50}) = true;imshow(粮食)
可视化图像中所有连接组件矩阵,然后通过创建一个标签显示它作为一个伪彩色索引图像。
使用labelmatrix
创建一个标签的输出矩阵bwconncomp
。请注意,labelmatrix
存储标签矩阵所需的最小数值类对象的数量。
标签= labelmatrix (cc);谁标签
名字大小字节256 x256 65536 uint8类属性标记
使用label2rgb
选择colormap、背景颜色和标签中的对象矩阵如何映射到colormap颜色。伪彩色图像的标签识别标签中的每个对象矩阵映射到一个不同的颜色在一个关联colormap矩阵。
RGB_label = label2rgb(标签,“春天”,“c”,“洗牌”);imshow (RGB_label)
计算成立统计
计算图像中每个对象使用的面积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_areas)
min_area = 61
idx = 16
粮食= false(大小(bw));谷物(cc.PixelIdxList {idx}) = true;imshow(粮食)
使用柱状图
命令来创建一个直方图的大米粮食领域。
直方图(grain_areas)标题(“水稻粮食面积直方图”)
另请参阅
imopen
|bwareaopen
|bwconncomp
|regionprops
|imadjust
|imbinarize
|label2rgb
|labelmatrix
|imread
|imshow