读陶校长的演讲有感:Niblack---二值化算法 - cxf7394373的专栏 - CSDN博客
来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 17:44:33
Niblack---二值化算法 收藏
Niblack二值化算法是比较简单的局部阈值方法,阈值的计算公式是T = m + k*v,其中m为以该像素点为中心的区域的平均灰度值,v是该区域的标准差,k是一个系数,matlab程序如下:view plaincopy to clipboardprint?
I = imread('card3.bmp');
I = rgb2gray(I);
w = 2;%
max = 0;
min = 0;
[m,n] = size(I);
T = zeros(m ,n );
%
for i = (w + 1):(m - w)
for j = (w + 1):(n - w)
sum = 0;
for k = -w:w
for l = -w:w
sum = sum + uint32(I(i + k,j + l));
end
end
average = double(sum) /((2*w+1)*(2*w+1));
s = 0;
for k = -w:w
for l = -w:w
s = s + (uint32(I(i + k,j + l)) - average)*(uint32(I(i + k,j + l)) - average);
end
end
s= sqrt(double(s)/((2*w+1)*(2*w+1)));
T(i,j) = average + 0.2*s;
end
end
for i = 1:m
for j = 1:n
if I(i,j) > T(i,j)
I(i,j) = uint8(255);
else
I(i,j) = uint8(0);
end
end
end
imshow(I);
I = imread('card3.bmp');
I = rgb2gray(I);w = 2;%
max = 0;
min = 0;
[m,n] = size(I);
T = zeros(m ,n );
%
for i = (w + 1):(m - w)
for j = (w + 1):(n - w)
sum = 0;
for k = -w:w
for l = -w:w
sum = sum + uint32(I(i + k,j + l));
end
end
average = double(sum) /((2*w+1)*(2*w+1));
s = 0;
for k = -w:w
for l = -w:w
s = s + (uint32(I(i + k,j + l)) - average)*(uint32(I(i + k,j + l)) - average);
end
end
s= sqrt(double(s)/((2*w+1)*(2*w+1)));
T(i,j) = average + 0.2*s;
end
end
for i = 1:m
for j = 1:n
if I(i,j) > T(i,j)
I(i,j) = uint8(255);
else
I(i,j) = uint8(0);
end
end
end
imshow(I); 上述程序中选择的窗口大小是5*5,处理结果不好,产生了大量的噪声... 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cxf7394373/archive/2010/08/04/5787908.aspx#
Niblack二值化算法是比较简单的局部阈值方法,阈值的计算公式是T = m + k*v,其中m为以该像素点为中心的区域的平均灰度值,v是该区域的标准差,k是一个系数,matlab程序如下:view plaincopy to clipboardprint?
I = imread('card3.bmp');
I = rgb2gray(I);
w = 2;%
max = 0;
min = 0;
[m,n] = size(I);
T = zeros(m ,n );
%
for i = (w + 1):(m - w)
for j = (w + 1):(n - w)
sum = 0;
for k = -w:w
for l = -w:w
sum = sum + uint32(I(i + k,j + l));
end
end
average = double(sum) /((2*w+1)*(2*w+1));
s = 0;
for k = -w:w
for l = -w:w
s = s + (uint32(I(i + k,j + l)) - average)*(uint32(I(i + k,j + l)) - average);
end
end
s= sqrt(double(s)/((2*w+1)*(2*w+1)));
T(i,j) = average + 0.2*s;
end
end
for i = 1:m
for j = 1:n
if I(i,j) > T(i,j)
I(i,j) = uint8(255);
else
I(i,j) = uint8(0);
end
end
end
imshow(I);
I = imread('card3.bmp');
I = rgb2gray(I);w = 2;%
max = 0;
min = 0;
[m,n] = size(I);
T = zeros(m ,n );
%
for i = (w + 1):(m - w)
for j = (w + 1):(n - w)
sum = 0;
for k = -w:w
for l = -w:w
sum = sum + uint32(I(i + k,j + l));
end
end
average = double(sum) /((2*w+1)*(2*w+1));
s = 0;
for k = -w:w
for l = -w:w
s = s + (uint32(I(i + k,j + l)) - average)*(uint32(I(i + k,j + l)) - average);
end
end
s= sqrt(double(s)/((2*w+1)*(2*w+1)));
T(i,j) = average + 0.2*s;
end
end
for i = 1:m
for j = 1:n
if I(i,j) > T(i,j)
I(i,j) = uint8(255);
else
I(i,j) = uint8(0);
end
end
end
imshow(I); 上述程序中选择的窗口大小是5*5,处理结果不好,产生了大量的噪声... 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cxf7394373/archive/2010/08/04/5787908.aspx#
Niblack---二值化算法 - cxf7394373的专栏 - CSDN博客
CSS优先级权重计算法 - goplay122的专栏 - CSDN博客
无锁的 ( lock-free ) 线程安全算法 - jadedrip的专栏 - CSDN博客
汉字区位码查询与算法 - supersi的专栏 - CSDN博客
bbbbbbj的专栏 - CSDN博客
vc++ - lonelytreebjfu的专栏 - CSDN博客
ASCII码表 - heruibin的专栏 - CSDN博客
tcp cwnd - linweixuan的专栏 - CSDN博客
RTMP是什么 - Thinkor2k8的专栏 - CSDN博客
手机知识 - whpeace的专栏 - CSDN博客
指针Guide - chinahai的专栏 - CSDN博客
数据库触发器 - chinayuan的专栏 - CSDN博客
中国式管理 - wmnothing的专栏 - CSDN博客
IE捉迷藏 - bluesqsr的专栏 - CSDN博客
USB有关的编程 - sanshao27的专栏 - CSDN博客
一篇很实用的入门教程 - ph9527的专栏 - CSDN博客
软件开发的效率 - wmnothing的专栏 - CSDN博客
VB的浮点数处理 - zdingyun的专栏 - CSDN博客
程序员的面包 - ShaHuShaBoJue的专栏 - CSDN博客
工作的5个阶段 - bingling525的专栏 - CSDN博客
变参函数的实现 - 菜鸟的专栏 - CSDN博客
DLL Hell的解决方案 - jonathandj的专栏 - CSDN博客
IM服务器的架构 - sanfengshou的专栏 - CSDN博客
IMS架构方面的需求 - foolskindom的专栏 - CSDN博客