引言
图像分割是将数字图像划分为多个区域(或像素的集合)的过程,这些区域通常对应于真实世界的物体或图像中的特定部分。图像分割的目标是简化或改变图像的表示形式,使得图像更容易理解和分析。图像分割通常用于定位图像中的物体和边界(线,曲线等)。在某些情况下,图像分割还可以用于将图像分割为感兴趣的区域和背景。
思路
全局阈值处理
定义一个变量 deltaT
,用于确定阈值收敛的条件。初始化阈值 T
为图像 img1
的平均灰度值。设置一个标志变量 flag
为真,用于控制后续的循环。
在循环中,首先根据当前阈值 T
对图像进行分割,得到一个二值图像 temp
。然后计算 temp
中为真和为假的像素在原图 img1
中的平均灰度值 m1
和 m2
。接着计算新的阈值 t
为 m1
和 m2
的平均值。如果 T
和 t
的差的绝对值大于等于 deltaT
,则继续循环,否则结束循环。在每次循环结束时,将 T
更新为 t
。
循环结束后,使用最终的阈值 T
对原图 img1
进行分割,得到最终的二值图像 img2
。
应用案例
% 读取图像
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);