clc
clear all
close all
M=3;%3*3的邻域窗口
N=3;
for iter = 1:156
iter
img = imread(['E:\pictest\',num2str(iter),'.jpg']);%读取图片
[m,n,s] = size(img);%读取图片
%I_gray=rgb2gray(img);
T=zeros(m,n);
%figure(1);imshow(I_gray);
I_gray=double(img);
for i=M+1:m-M
for j=N+1:n-N
max=1;min=255;
for k=i-M:i+M %当前像素周围的3*3区域中的最大值和最小值
for l=j-N:j+N
if I_gray(k,l)>max
max=I_gray(k,l);
end
if I_gray(k,l)<min
min=I_gray(k,l);
end
end
end
T(i,j)=(max+min)/2;%T矩阵用来记录每点像素的阈值
end
end
I_bw=zeros(m,n);
for i=1:m
for j=1:n %%二值化
if I_gray(i,j)>T(i,j)
I_bw(i,j)=255;
else I_bw(i,j)=0;
end
end
end
imwrite(I_bw, ['E:\pic\burnsen\', 'pic', num2str(iter),'.jpg']);
end
clear all
close all
M=3;%3*3的邻域窗口
N=3;
for iter = 1:156
iter
img = imread(['E:\pictest\',num2str(iter),'.jpg']);%读取图片
[m,n,s] = size(img);%读取图片
%I_gray=rgb2gray(img);
T=zeros(m,n);
%figure(1);imshow(I_gray);
I_gray=double(img);
for i=M+1:m-M
for j=N+1:n-N
max=1;min=255;
for k=i-M:i+M %当前像素周围的3*3区域中的最大值和最小值
for l=j-N:j+N
if I_gray(k,l)>max
max=I_gray(k,l);
end
if I_gray(k,l)<min
min=I_gray(k,l);
end
end
end
T(i,j)=(max+min)/2;%T矩阵用来记录每点像素的阈值
end
end
I_bw=zeros(m,n);
for i=1:m
for j=1:n %%二值化
if I_gray(i,j)>T(i,j)
I_bw(i,j)=255;
else I_bw(i,j)=0;
end
end
end
imwrite(I_bw, ['E:\pic\burnsen\', 'pic', num2str(iter),'.jpg']);
end

该博客详细介绍了伯恩森二值化算法的MATLAB实现过程。首先设定3*3邻域窗口,然后通过循环遍历图像,计算每个像素点周围的最大值和最小值,进而确定阈值。以此阈值进行二值化处理,最终将二值化后的图像保存。该算法用于图像处理,可适应不同光照条件下的图像转换。

2万+

被折叠的 条评论
为什么被折叠?



