Matlab调用adaptivethreshold函数提示未识别函数或变量报错
报错原因
触发Unrecognized function or variable 'adaptivethreshold'报错的核心逻辑非常直接:
- 你调用的
adaptivethreshold不是Matlab自带的内置函数,是Matlab用户社区文件交换板块的第三方用户贡献函数,Matlab默认不会预装这类非官方工具。 - 就算你手动下载了这个函数文件,如果没有把文件所在目录加入Matlab的运行搜索路径,Matlab运行时找不到对应.m文件,一样会报未识别函数的错。
额外提一句:Matlab官方图像处理工具箱提供的自适应阈值函数名为adaptthresh,和你用的这个第三方函数名字差了几个字母,参数定义、调用方式也不一样,直接拿第三方示例的代码调官方函数肯定跑不通。
解决方法
你可以根据自己的需求选下面任意一种方案处理:
- 方案1:继续使用你参考的第三方自适应阈值工具
下载对应工具包解压后,找到存放adaptivethreshold.m的文件夹,要么把这个文件夹切为Matlab当前的工作目录,要么在Matlab左侧的文件浏览器里右键点这个文件夹,选「添加到路径」→「选定的文件夹和子文件夹」,路径加完再跑原来的代码就能正常识别函数了。 - 方案2:替换为Matlab官方自带实现(推荐,不需要额外下第三方文件)
先确认你装了Image Processing Toolbox(图像处理工具箱),用官方的adaptthresh(生成自适应阈值矩阵)+imbinarize(按阈值二值化)组合替换原来的第三方函数调用就行。改完的参考代码如下,参数和你原代码里的邻域大小、偏移量做了对应:
clear;close all; im1=imread('page.png'); im2=imread('tshape.png'); % 兼容彩色输入,统一转灰度图 if ndims(im1) == 3 im1 = rgb2gray(im1); end if ndims(im2) == 3 im2 = rgb2gray(im2); end % 对应原代码:邻域11*11,灵敏度参数0.03 T1 = adaptthresh(im1, 0.03, "NeighborhoodSize", [11 11]); bwim1 = imbinarize(im1, T1); % 对应原代码:邻域15*15,灵敏度参数0.02 T2 = adaptthresh(im2, 0.02, "NeighborhoodSize", [15 15]); bwim2 = imbinarize(im2, T2); subplot(2,2,1); imshow(im1); subplot(2,2,2); imshow(bwim1); subplot(2,2,3); imshow(im2); subplot(2,2,4); imshow(bwim2);
- 方案3:手动实现自适应阈值逻辑
如果你不想装工具箱也不想下第三方代码,可以自己写逻辑实现:先对输入图像做指定尺寸邻域的均值滤波,把每个位置的邻域均值减去你设定的偏移常量作为该点的二值化阈值,逐像素和原灰度值比较输出二值结果即可,逻辑不复杂,几十行代码就能写完。
内容的提问来源于stack exchange,提问作者AIN NURJANNAH KAUS
相关产品推荐
相关产品推荐

