B站台湾大学郭彦甫|MATLAB 学习笔记|09 图像处理II Image Processing

MATLAB学习笔记(09 图像处理II Image Processing)

1. 提出问题

题目:如何找出图片中的米粒,并且确定他们的大小?

老师提出的建议:

  • 把图像二值化(将米粒变成白色,背景变成黑色)
  • 计算连接的白色像素点

2. 图像阈值化 (Image Thresholding)

计算图像理想的阈值等级:graythresh()

将图像转换为二值图像:imbw()

I = imread('rice.png'); 
level=graythresh(I);
bw=im2bw(I, level);
subplot(1,2,1); imshow(I);
subplot (1,2,2); imshow(bw);

P5 exercise (未)

  • Write a program to convert the image rice.png into a binary image using a threshold
  • Do NOT use im2bw()
  • Try different threshold values to see if you program works

3. 背景预测 (Background Estimation)

预测图像背景的灰度等级

I = imread('rice.png');
BG = imopen(I, strel('disk', 15));  
%strel('disk', 15)创建一个半径为 15 的盘形结构元素。
%J = imopen(I,SE) 对灰度或二值图像 I 执行形态学开运算,返回经过开运算的图像 J。
imshow(BG);

原图像减去背景

I = imread('rice.png');
subplot(1,3,1); imshow(I);
BG = imopen(I, strel('disk', 15));
subplot(1,3,2); imshow(BG);
I2 = imsubtract(I, BG);
subplot(1,3,3); imshow(I2);

4. 对已移除背景的图像进行图像阈值化

I = imread('rice.png'); level=graythresh(I);
bw = im2bw(I, level); subplot (1,2,1); %把直接阈值化后的图像画出来(图1)
imshow(bw); BG = imopen(I, strel('disk', 15));  %得到图像背景
I2 = imsubtract(I, BG); %原图减去背景
level=graythresh(I2);
bw2 = im2bw(I2, level);   %对减去背景的图像进行阈值化处理(图2)
subplot(1,2,2); imshow(bw2);

5. 连通域标记(Connected-component Labeling )

一个可以对每个物件做唯一的标记的处理方法,处理方法如下:

  1. 首先是两个矩阵,一个是二值图像矩阵,一个是标签矩阵

  1. 从二值图像矩阵第一行开始从左往右进行扫描,在第二行找到一个元素 1 对其进行标记,并在标签矩阵的对应位置上也进行标记。

  1. 将二值图像中已标记过的元素 1标记为 0,并依次在其右边和下边寻找元素 1 ,如果有的话将其标记,并在标签矩阵的对应位置也进行标记。

  1. 重复过程2,直到所有标记过的元素其右边和下边元素都为 0 ,得到第一个连通的区域1:

  1. 继续在二值图像上搜寻下一个连通区域

MATLAB 内建的连通域标记 bwlabel()

I=imread('rice.png');
BG=imopen(I, strel('disk', 15));
I2=imsubtract(I, BG); level=graythresh(I2);
BW=im2bw(I2, level);
[labeled, numObjects]=bwlabel(BW, 8);
%BW为二值化图像,8为连通类型(8连通),labeled为便签处理后的图像(标签矩阵),numObjects为物件个数

内建函数 bwlabel() 的搜寻顺序为从上到下

6. 对物件进行彩色编码:label2rgb()

![pic10](第9讲/pic10.png)![pic10](第9讲/pic10.png)I=imread('rice.png');
BG=imopen(I, strel('disk', 15));
I2=imsubtract(I, BG); level=graythresh(I2);
BW=im2bw(I2, level);
[labeled, numObjects]=bwlabel(BW, 8);
RGB_label=label2rgb(labeled);%将标签矩阵以彩色方式展示出来
imshow(RGB_label);

P15 exercise(未)

  • Plot the histogram of grain size(画出米粒大小的直方图)
  • Identify all the grains in the image by painting them in red(把米粒用红色标出)

7. 查看物件参数

查看图片中识别的物件参数

I=imread('rice.png');
BG=imopen(I, strel('disk', 15));
I2=imsubtract(I, BG); level=graythresh(I2);
BW=im2bw(I2, level);
[labeled, numObjects]=bwlabel(BW, 8);
graindata = regionprops(labeled, 'basic');%返回二值图像 labeled 中每个 8 连通分量(对象)的属性集的测量值。如果指定 'basic',则 regionprops 仅计算 'Area'、'Centroid' 和 'BoundingBox' 测量值。

graindata(51)%查看第 51 个物件的参数



>> Class_9

ans = 

  包含以下字段的 struct:

           Area: 155 	%区域中的实际像素数
       Centroid: [112.4258 245.8645]	%区域的质心
    BoundingBox: [108.5000 234.5000 8 22]  %包含区域的最小外接框的位置和大小

8. 交互式选择:bwselaect()

使用鼠标选择物件

I=imread('rice.png'); level=graythresh(I);
BG=imopen(I, strel('disk', 15));
I2=imsubtract(I, BG); BW=im2bw(I2, graythresh(I2));
ObjI = bwselect(BW); imshow(ObjI); %对图像,鼠标左键点击选择,右键确定
posted @   一抹微瀾  阅读(217)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示