如何在MATLAB中使用Sauvola局部图像阈值法?
Sauvola局部图像阈值法使用指南及代码示例
一、函数参数说明
这个sauvola函数是实现局部自适应二值化的工具,参数说明如下:
- 必传参数:
image:输入必须是二维灰度图像,如果是彩色图像,需要先转成灰度图
- 可选参数(按顺序传入,可省略,省略时用默认值):
window:局部计算均值和标准差的窗口大小,默认值[3 3],窗口越大,二值化结果越平滑k:算法的调整系数,控制阈值的松紧,默认值0.34,数值越大,阈值越高,二值化后白色区域越少padding:图像边界的填充方式,默认'replicate',可选值和MATLAB内置的padarray函数一致,比如'zeros'、'symmetric'等
函数输出是二值化后的逻辑数组,可直接用imshow显示,或者转成uint8类型(uint8(binary_img)*255)。
二、正确使用代码示例
不需要重复实现函数内部的计算逻辑,直接调用sauvola函数即可,完整示例如下:
% 1. 读取图像并处理为灰度图 I = imread('blir.jpg'); % 判断是否为彩色图,是则转灰度 if size(I, 3) == 3 I = rgb2gray(I); end % 2. 调用Sauvola函数的几种方式 % 方式1:使用所有默认参数 binary_default = sauvola(I); % 方式2:自定义窗口大小为7x7,调整系数k=0.4 binary_custom_window_k = sauvola(I, [7 7], 0.4); % 方式3:自定义窗口、k值和填充方式 binary_full_custom = sauvola(I, [5 5], 0.3, 'zeros'); % 3. 对比显示结果 figure('Name','Sauvola二值化结果对比'); subplot(2,2,1); imshow(I); title('原始灰度图像'); subplot(2,2,2); imshow(binary_default); title('默认参数'); subplot(2,2,3); imshow(binary_custom_window_k); title('7x7窗口 + k=0.4'); subplot(2,2,4); imshow(binary_full_custom); title('5x5窗口 + k=0.3 + 零填充');
三、你的代码问题纠正
你自己写的那段重复计算均值、标准差的代码是多余的——sauvola函数内部已经封装了这些逻辑,直接调用函数就能得到二值化结果。另外,你那段代码里没有定义image、window等变量,运行会报错,完全不需要写这部分,直接调用函数即可。
内容的提问来源于stack exchange,提问作者yasmin
相关产品推荐
相关产品推荐

