Image Matlab-动态阈值

Image Matlab-动态阈值,image,algorithm,matlab,threshold,adaptive-threshold,Image,Algorithm,Matlab,Threshold,Adaptive Threshold,我试图做一个动态阈值,但它出现了一些错误。我正试图根据以下代码进行调整: function[Output]=dinamicsthresh() [文件名,路径名]=uigetfile('*.bmp;*.jpg','请选择一个图像文件'); I=完整文件(路径名、文件名); I=imread(I); I=RGB2灰色(I); I=2倍(I); [H,W]=尺寸(I); 输出=零(H,W); halfH=圆形(H/2); 半宽=圆形(宽2); 对于i=H:H 对于j=W:W C=I(I-halfH:I

我试图做一个动态阈值,但它出现了一些错误。我正试图根据以下代码进行调整:

function[Output]=dinamicsthresh()
[文件名,路径名]=uigetfile('*.bmp;*.jpg','请选择一个图像文件');
I=完整文件(路径名、文件名);
I=imread(I);
I=RGB2灰色(I);
I=2倍(I);
[H,W]=尺寸(I);
输出=零(H,W);
halfH=圆形(H/2);
半宽=圆形(宽2);
对于i=H:H
对于j=W:W
C=I(I-halfH:I+halfH,j-halfW:j+halfW);
适应性_阈值=平均值(平均值(C))-12;
如果I(I,j)
阈值算法将每个像素和局部平均值之间的差值与给定阈值进行比较

在Matlab中,可以使用
filter2
以更直接的方式执行此任务

例如,对于此图像:

% --- Parameters
w = 20;
h = 20;
th = 12;

% --- Load image
Img = double(rgb2gray(imread('Img.png')));

% --- Get the locally-averaged image
Mean = filter2(fspecial('average', [h w]), Img);

% --- Get thresholded image
BW = (Img-Mean)>th;

% --- Disply result
imshow(BW)

我得到以下结果:

当然,您可以使用这些参数使此代码适应您的图像:

  • w
    是平均框的宽度
  • h
    是平均箱的高度
  • th
    是与平均值之差的阈值

最好的,

您能提供一些关于您收到的错误的信息,以及代码的哪一部分导致了错误吗?您的
for
循环的
范围为
H:H
W:W
。。。每一个都执行一次。这看起来很可疑。我期望类似于
1:H
1:W
的东西。
% --- Parameters
w = 20;
h = 20;
th = 12;

% --- Load image
Img = double(rgb2gray(imread('Img.png')));

% --- Get the locally-averaged image
Mean = filter2(fspecial('average', [h w]), Img);

% --- Get thresholded image
BW = (Img-Mean)>th;

% --- Disply result
imshow(BW)