用matlab编写维尔斯特拉斯图像的程序

我需要的是代码,能运行就行
2025-01-08 05:52:34
推荐回答(2个)
回答1:

希望以下程序对你有所帮助

elseif nargin<2
N=128;
end

image_input=imread(image_name);
subplot(2,2,1);
imshow(image_input);
title('原图像');
[size_m,size_n]=size(image_input);
matrix_temp=zeros(size_m,size_n);

% 求水平集
for row=1:size_m
for col=1:size_n
if image_input(row,col) > N
matrix_temp(row,col)=1;
end
end
end

subplot(2,2,2);
imshow(matrix_temp,[]);
title('图像的水平集');
imwrite(matrix_temp,'level_setzhan.bmp');
% 图像矩阵扩展 赋值 便于处理边界
matrix_ex=zeros(size_m+2,size_n+2);
for row=1:size_m
for col=1:size_n
matrix_ex(row+1,col+1)=matrix_temp(row,col);
end
end

% 四邻域反填充 得水平线
matrix_new=matrix_temp;
for row=2:size_m+1
for col=2:size_n+1
if matrix_ex(row+1,col)==0 & matrix_ex(row-1,col)==0 & matrix_ex(row,col+1)==0 & matrix_ex(row,col-1)==0
matrix_new(row-1,col-1)=1;
end
end
end

subplot(2,2,3);
imshow(matrix_new,[]);
title('图像的水平线');
%imwrite(matrix_new,'level_line.bmp');

% 求图像的等高线
contour=zeros(size_m,size_n);

for row=1:size_m
for col=1:size_n
if image_input(row,col)==N
contour(row,col)=1;
end
contour(row,col)=1-contour(row,col);
end
end

subplot(2,2,4);
imshow(contour,[]);
title('图像的等高线');
%imwrite(contour,'contour.bmp');
function levelset2image(out_filename)
% 水平集检验 体现图象与水平集的关系
% out_filename: 输出文件名

cd('level_set');
% 生成各层水平集-----------------------
temp=imread('level_set_0.bmp');
[size_r,size_c]=size(temp);
level_image=zeros(size_r,size_c,255);

for N=0:254
level_image(:,:,N+1)=imread(strcat('level_set_',num2str(N),'.bmp'));
end

% 求各层矩阵最大值
conduct_image=zeros(size_r,size_c);

% 由各层水平集重构图像--------------------
for row=1:size_r
for col=1:size_c
for i=255:-1:1
if level_image(row,col,i)==255
conduct_image(row,col)=i; %%%%%%
break;
end
end
end
end

imshow(conduct_image,[]);
title('重构出的图像');
imwrite(uint8(conduct_image),out_filename);
cd('..');

回答2:

混个脸熟...顺便求个分!!