b8a8ff2bc6
实现内容: - 网格划分:投影分析 + 自相关估周期 + 白顶帽去背景 + 质心提取 - 三种阈值分割:人工阈值、Otsu自动阈值、迭代阈值 - TV去噪(Chambolle投影算法) - 后处理:去小连通域 + 保留最大连通域 - 完整可视化:网格叠加、阈值对比、收敛曲线、分割结果 参考MATLAB代码:NewGridAndCV/demo_GriddingAndCV.m
48 lines
1.0 KiB
Matlab
48 lines
1.0 KiB
Matlab
%%%%下面检测二值图的轮廓:如果与四邻域的差中有一个为1,则为内点,否则为外点.
|
|
function output=contour_bw(input)
|
|
%input=imread('bw_image.bmp');
|
|
%%输入图像矩阵:input
|
|
%%输出图像矩阵:在边界处为255,内部为0
|
|
% input=Lnew_out;
|
|
|
|
[r,c]=size(input);
|
|
output=255*zeros(r,c);
|
|
%改动过
|
|
% global num;
|
|
global r_avg;
|
|
r_avg=0;
|
|
global g_avg;
|
|
g_avg=0;
|
|
global b_avg;
|
|
b_avg=0;
|
|
% global rect_rgb_01;%最初切割原图像
|
|
Reb_dot=0;
|
|
|
|
|
|
for i=2:r-1
|
|
for j=2:c-1
|
|
if (input(i,j)-input(i,j+1)==1 || input(i,j)-input(i,j-1)==1 || input(i,j)-input(i+1,j)==1 || input(i,j)-input(i-1,j)==1)
|
|
output(i,j)=255;
|
|
% r_avg=r_avg+double(rect_rgb_01(i,j,1));
|
|
% g_avg=g_avg+double(rect_rgb_01(i,j,2));
|
|
% b_avg=b_avg+double(rect_rgb_01(i,j,3));
|
|
% num=num+1;
|
|
Reb_dot=Reb_dot+1;
|
|
else
|
|
output(i,j)=0;
|
|
end
|
|
end
|
|
Reb_dot
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
% r_avg=uint8(r_avg/num);
|
|
% g_avg=uint8(g_avg/num);
|
|
% b_avg=uint8(b_avg/num);
|
|
|
|
|
|
|
|
|