You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 20:13:08