在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
关于大津阈值法的定义这里不再赘述,直接给出实现代码: %image_graythresh.m function level =image_graythresh(I) %该函数作用:使用大津阈值法找出图像分割的阈值 [M,N] = size(I); %预定义划分的两组,分别为C1、C2。预定义level,用于存放不同划分时的类间方差 C1 = zeros(1,M*N); C2 = zeros(1,M*N); level =zeros(1,M*N); I = double(I); %将原图像uint8型转换为double型 %求出原图像灰度最大、最小值 min_value =min(min(I)); max_value =max(max(I)); %定义C1、C2、level的下标,同时起统计个数的作用 columns1 = 1; columns2 = 1; columns3 = 1; %开始遍历 for k =min_value:max_value - 1 for i = 1:M for j = 1:N if I(i,j)<=k C1(columns1) = I(i,j); %得分组C1 columns1 = columns1 + 1; else C2(columns2) = I(i,j); %得到分组C2 columns2 = columns2 + 1; end end end %得到C1、C2的概率 posibility1 = (columns1-1) / (M*N); posibility2 = 1 - posibility1; %得到C1、C2的均值 %由于预定义个数大于实际个数,因而求均值时不记录多余的零 ave1 = sum(C1)/numel(find(C1~=0)); ave2 = sum(C2)/numel(find(C2~=0)); %得到类间方差,存放在leve中 std = posibility1*posibility2*(ave1 -ave2)^2; level(columns3) = std; columns3 = columns3 + 1; columns1 = 1; columns2 = 1; C1 = zeros(1,M*N); C2 = zeros(1,M*N); end %得到最大类间方差下标从而得到阈值 [~, i] =max(level); level = min_value +i - 1; %对阈值做归一化处理 level = level/255; end %DIP_exp4_1.m %该m文件调用Matlab自带函数graythresh以及自编函数image_graythresh对图像进行阈值分割 clc;clear;closeall; I =imread('cameraman.tif'); level =graythresh(I); %得到大津阈值法阈值(Matlab自带函数) J = im2bw(I,level); %实现图像二值化,即非黑即白 level1 =image_graythresh(I); %得到大津阈值法阈值(自编函数) K =im2bw(I,level1); subplot(221),imshow(I);title('原图像'); subplot(222),imshow(J);title('大津法阈值分割后图像'); subplot(223),imshow(I);title('原图像'); subplot(224),imshow(K);title('自编大津法阈值分割后图像'); 运行DIP_exp4_1.m文件得结果如下: |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论