我正在尝试进行动态阈值处理,但它出现了一些错误。我正在尝试改编这段代码:http://www.inf.ed.ac.uk/teaching/courses/ivr/lectures/ivr5hand.pdf
function [Output ] = dinamicthresh()
[filename,pathname] = uigetfile('*.bmp; *.jpg', 'Please select an image file');
I=fullfile (pathname,filename);
I=imread(I);
I=rgb2gray(I);
I=im2double(I);
[H,W]= size(I);
Output= zeros(H,W);
halfH=round(H/2);
halfW=round(W/2);
for i= H:H
for j = W:W
C = I(i-halfH:i+halfH,j-halfW:j+halfW);
adaptative_thresh = mean(mean(C)) - 12;
if I(i,j) < adaptative_thresh
Output(i,j)= 1;
else
Output(i,j)= 0;
end
end
end
subplot(1,2,1);imshow(I);title('Original Image');
subplot(1,2,2);imshow(Output);title('Adaptive Thresholding');
end
答案 0 :(得分:0)
您的阈值算法会将每个像素与本地平均值之间的差异与给定阈值进行比较。
使用filter2
可以在Matlab中以更简单的方式执行此任务。
例如使用此图片:
% --- 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
是与平均值差异的阈值。最佳,