⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmo.m

📁 关于偏微分方程进行图像处理的电子书,对于学习动态轮廓实现图像的分割非常有用
💻 M
字号:
function BMO( image_name,N,out_filename )
% Bence-Merriman-Osher 算子
% image_name: 图像文件名
% N         : 叠代次数

image_matrix=imread(image_name);
subplot(1,2,1);
imshow(image_matrix);
title('原图像');

for index=1:N
    heat_matrix=Heat_EEquation( image_matrix,0.5);   % 可调参数 0.5
    image_matrix=binari_value( heat_matrix );   % 二值化
end
imwrite( image_matrix,out_filename );
subplot(1,2,2);
imshow(image_matrix);
title(strcat('bmo迭代',num2str(N),'次后图像'));
%-----------------------------------------end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function image_I=Heat_EEquation(image_I ,t )
% 热传导方程 [ Ut=U0+t*Delta(U0) ]  - 迭代-   
% image_I           原图像文件矩阵
% t   迭代次数      建议t>5.0
[size_r,size_c]=size(image_I);
image_I=double(image_I);

N=t/0.1;    % 每次叠代的步长为0.1
for index=1:N     
    image_ex=matrix_expand(image_I);  % 边界拓展
    diff_two_order=zeros(size_r,size_c);
    
    for row=2:size_r+1
        for col=2:size_c+1
            diff_two_order(row-1,col-1)=-4*image_ex(row,col)+image_ex(row-1,col)+image_ex(row+1,col)+image_ex(row,col-1)+image_ex(row-1,col+1);
        end
    end    
    image_I=image_I+0.1*diff_two_order; 
end 
% -------------------------end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function matrix_ex=matrix_expand(matrix)
% 对矩阵进行延拓   
   [size_r,size_c]=size(matrix);
   matrix_ex=zeros(size_r+2,size_c+2);
   % 中
   for row=1:size_r
       for col=1:size_c
           matrix_ex(row+1,col+1)=matrix(row,col);
       end
  end
  % 左,右
  for row=1:size_r
      matrix_ex(row+1,1)=matrix(row,1);
      matrix_ex(row+1,size_c+2)=matrix(row,size_c);
  end
  % 上,下
  for col=1:size_c
      matrix_ex(1,col+1)=matrix(1,col);
      matrix_ex(size_r+2,col+1)=matrix(size_r,col);
  end

  matrix_ex(1,1)=matrix(1,1);
  matrix_ex(1,size_c+2)=matrix(1,size_c);

  matrix_ex(size_r+2,1)=matrix(size_r,1);
  matrix_ex(size_r+2,size_c+2)=matrix(size_r,size_c);
  % -------------------------
            
% --------------------------
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function bi_matrix=binari_value( former_matrix )
 % 对输入的图像矩阵二值化 128    0-255
[size_r,size_c]=size( former_matrix );
bi_matrix=zeros(size_r,size_c);

for index=1:size_r*size_c
        if former_matrix(index)>128
            bi_matrix(index)=255;
        end    
end
% ---------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -