我怎样才能对图像进行阈值处理?
How can I threshold an image?
我需要对已经通过同态滤波器的图像应用阈值处理。
我的阈值必须是图像强度的平均值 + 标准偏差。
我使用阈值 code by Jan Motl 如下:
function J = bernsen_thres(I)
T = thres_val(I);
J = bernsen(I, [T T],20,'replicate');
end
function T = thres_val(I)
mn = mean(I(:));
sd = std(double(I(:)));
thres = round((mn+sd));
if(is_odd(thres))
T = thres;
else
T = thres+1;
end
function ret = is_odd(val)
if(mod(val,2) == 0);
ret = 0;
else
ret = 1;
end
我使用同态滤波器code from Steve Eddins如下,
clear_all();
I = gray_imread('cameraman.png');
I = steve_homo_filter(I);
Ithres = bernsen_thres(I);
imshowpair(I, Ithres, 'montage')
但是输出全黑,
我应该怎么做才能解决这个问题?
好的。我解决了问题。
clear_all();
I = gray_imread('cameraman.png');
Ihmf = mat2gray(steve_homo_filter(I));
T = thres_val(I)/255
Ithres = Ihmf > T;
imshowpair(Ihmf, Ithres, 'montage');
有两个问题,
同态滤波器的输出强度不在 0 和 1 之间。我通过应用 mat2gray()
.
解决了这个问题
在这种情况下,thres_val()
的输出是 181。该值除以 255 以使其介于 0 和 1 之间。
我需要对已经通过同态滤波器的图像应用阈值处理。
我的阈值必须是图像强度的平均值 + 标准偏差。
我使用阈值 code by Jan Motl 如下:
function J = bernsen_thres(I)
T = thres_val(I);
J = bernsen(I, [T T],20,'replicate');
end
function T = thres_val(I)
mn = mean(I(:));
sd = std(double(I(:)));
thres = round((mn+sd));
if(is_odd(thres))
T = thres;
else
T = thres+1;
end
function ret = is_odd(val)
if(mod(val,2) == 0);
ret = 0;
else
ret = 1;
end
我使用同态滤波器code from Steve Eddins如下,
clear_all();
I = gray_imread('cameraman.png');
I = steve_homo_filter(I);
Ithres = bernsen_thres(I);
imshowpair(I, Ithres, 'montage')
但是输出全黑,
我应该怎么做才能解决这个问题?
好的。我解决了问题。
clear_all();
I = gray_imread('cameraman.png');
Ihmf = mat2gray(steve_homo_filter(I));
T = thres_val(I)/255
Ithres = Ihmf > T;
imshowpair(Ihmf, Ithres, 'montage');
有两个问题,
同态滤波器的输出强度不在 0 和 1 之间。我通过应用
mat2gray()
. 解决了这个问题
在这种情况下,
thres_val()
的输出是 181。该值除以 255 以使其介于 0 和 1 之间。