写一段用OTSU算法将图像二值化的MATLAB程序
时间: 2024-03-22 16:38:10 浏览: 64
好的,以下是用OTSU算法将图像二值化的MATLAB程序:
```matlab
% 读入图像
img = imread('image.jpg');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 计算灰度图像的直方图
histogram = imhist(gray_img);
% 计算图像像素总数
total_pixels = numel(gray_img);
% 初始化变量
max_var = 0;
threshold = 0;
% 遍历灰度级别,计算类间方差
for i = 1:256
% 计算背景像素数量
bg_pixels = sum(histogram(1:i));
% 计算前景像素数量
fg_pixels = total_pixels - bg_pixels;
% 计算背景平均灰度值
bg_mean = sum((0:i-1) .* histogram(1:i)) / bg_pixels;
% 计算前景平均灰度值
fg_mean = sum((i:255) .* histogram(i+1:end)) / fg_pixels;
% 计算类间方差
var_between = bg_pixels * fg_pixels * (bg_mean - fg_mean) ^ 2;
% 更新阈值和最大类间方差
if var_between > max_var
max_var = var_between;
threshold = i - 1;
end
end
% 用OTSU算法得到的阈值对图像进行二值化处理
binary_img = imbinarize(gray_img, threshold/255);
% 显示原图和二值化后的图像
subplot(1, 2, 1), imshow(gray_img), title('原图');
subplot(1, 2, 2), imshow(binary_img), title('二值化后的图像');
```
请注意,这段程序是将当前目录下名为`image.jpg`的图像进行二值化处理,并在一个窗口中显示原图和二值化后的图像。你可以根据自己的需要进行修改。
阅读全文