引言
图像分割是将数字图像划分为多个区域(或像素的集合)的过程,这些区域通常对应于真实世界的物体或图像中的特定部分。图像分割的目标是简化或改变图像的表示形式,使得图像更容易理解和分析。图像分割通常用于定位图像中的物体和边界(线,曲线等)。在某些情况下,图像分割还可以用于将图像分割为感兴趣的区域和背景。
思路
全局阈值处理
定义一个变量 deltaT
,用于确定阈值收敛的条件。初始化阈值 T
为图像 img1
的平均灰度值。设置一个标志变量 flag
为真,用于控制后续的循环。
在循环中,首先根据当前阈值 T
对图像进行分割,得到一个二值图像 temp
。然后计算 temp
中为真和为假的像素在原图 img1
中的平均灰度值 m1
和 m2
。接着计算新的阈值 t
为 m1
和 m2
的平均值。如果 T
和 t
的差的绝对值大于等于 deltaT
,则继续循环,否则结束循环。在每次循环结束时,将 T
更新为 t
。
循环结束后,使用最终的阈值 T
对原图 img1
进行分割,得到最终的二值图像 img2
。
应用案例
matlab">% 读取图像
img1 = imread("Fig1038(a)(noisy_fingerprint).tif");% 创建新的图形窗口
figure;% 在第一个子图中显示原图
subplot(1, 3, 1);
imshow(img1);% 在第二个子图中显示原图的直方图
subplot(1, 3, 2);
imhist(img1);% 设置阈值变化的最小值
deltaT = 0.5;
% 初始化阈值为图像的平均灰度值
T = mean2(img1);
flag = true;
while flag% 根据当前阈值分割图像temp = img1 > T;% 计算两个区域的平均灰度值m1 = mean(img1(temp));m2 = mean(img1(~temp));% 计算新的阈值t = (m1 + m2) * 0.5;% 检查阈值是否收敛flag = abs(T - t) >= deltaT;% 更新阈值T = t;
end
% 使用最终阈值分割图像
img2 = img1 > T;% 在第三个子图中显示分割后的图像
subplot(1, 3, 3);
imshow(img2);