matlab实现利用直方图确定阈值,对受噪声污染的指纹图片Fig0734.png进行分割,展示原图、直方图、分割后的图片(0、1二值图)
时间: 2023-07-10 12:11:20 浏览: 46
好的,以下是在MATLAB中实现该任务的示例代码:
```matlab
% 读取图片
img = imread('Fig0734.png');
img_gray = rgb2gray(img);
% 计算直方图
hist = imhist(img_gray);
% 寻找最佳阈值
total_pixels = numel(img_gray);
sum_B = 0;
sum_F = sum(hist);
w_B = 0;
w_F = total_pixels;
max_var = 0;
threshold = 0;
for i = 1:256
w_B = w_B + hist(i);
if w_B == 0
continue
end
w_F = total_pixels - w_B;
if w_F == 0
break
end
sum_B = sum_B + (i - 1) * hist(i);
mean_B = sum_B / w_B;
mean_F = (sum_F - sum_B) / w_F;
var_B = w_B * w_F * (mean_B - mean_F) ^ 2;
if var_B > max_var
max_var = var_B;
threshold = i - 1;
end
end
% 二值化
binary_img = im2bw(img_gray, double(threshold) / 255);
% 显示结果
figure
subplot(1, 3, 1)
imshow(img)
title('Original Image')
subplot(1, 3, 2)
imhist(img_gray)
title('Histogram')
subplot(1, 3, 3)
imshow(binary_img)
title('Binary Image')
```
运行上述代码后,会弹出一个包含三个子图的窗口,分别展示原图、直方图和二值化后的图片。你可以根据自己的需求进行调整和优化。