本文主要是介绍【图像分割】基于各向异性热扩散方程的图像分割附matlab代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1 简介
提出了一种基于各向异性扩散的图像分割算法.对现有的各向异性扩散的正则化方法进行了分析.根据微分几何中共形映射的有关理论,把原扩散方程分解为关于表面曲率的二阶方程,给出了分解式的正则化条件,保证了解的稳定性.通过对扩散系数的调节,提高了对各向异性扩散过程的控制能力.在形态学分割的基础上,通过能量函数最小化实现非线性尺度空间中的区域合并,消除了分水岭算法造成的严重过分割现象.实验结果表明,该算法的分割结果可为后续识别和理解提供较理想的方式.
2 部分代码
function [Normalized,X,Y] = AffineIm1(im, a, b, c, d, point1, point2)
%分别对wndim的四个角进行仿射变换
%f1,f2,f3,f4分别是目标图像的四个顶点
Mysize = size(im);
f1 = [a,0;0,a]*([cos(pi/b),-sin(pi/b);sin(pi/b),cos(pi/b)]*[1-point1,1-point2]');
f2 = [a,0;0,a]*([cos(pi/b),-sin(pi/b);sin(pi/b),cos(pi/b)]*[1-point1,Mysize(1,2)-point2]');
f3 = [a,0;0,a]*([cos(pi/b),-sin(pi/b);sin(pi/b),cos(pi/b)]*[Mysize(1,1)-point1,1-point2]');
f4 = [a,0;0,a]*([cos(pi/b),-sin(pi/b);sin(pi/b),cos(pi/b)]*[Mysize(1,1)-point1,Mysize(1,2)-point2]');
f1(1,1) = round(f1(1,1)+c);f1(2,1) = round(f1(2,1)+d);
f2(1,1) = round(f2(1,1)+c);f2(2,1) = round(f2(2,1)+d);
f3(1,1) = round(f3(1,1)+c);f3(2,1) = round(f3(2,1)+d);
f4(1,1) = round(f4(1,1)+c);f4(2,1) = round(f4(2,1)+d);
%找出被仿射后图像的外接矩形
minx = min([f1(1,1),f2(1,1),f3(1,1),f4(1,1)]);
maxx = max([f1(1,1),f2(1,1),f3(1,1),f4(1,1)]);
miny = min([f1(2,1),f2(2,1),f3(2,1),f4(2,1)]);
maxy = max([f1(2,1),f2(2,1),f3(2,1),f4(2,1)]);
flagx = 1;flagy = 1;
for i = minx:maxx
flagy = 1;
for j = miny:maxy
orco = inv([cos(pi/b),-sin(pi/b);sin(pi/b),cos(pi/b)])*([1/a,0;0,1/a]*([i,j]'-[c,d]'))+[point1,point2]';
if orco(1,1)<1 | orco(1,1)>Mysize(1,1) | orco(2,1)<1 | orco(2,1)>Mysize(1,2)
Normalized(flagx,flagy) = 0;
else
m = floor(orco(1,1));
n = floor(orco(2,1));
u = orco(1,1)-m;
v = orco(2,1)-n;
% if u>0.5 & v>0.5
% Normalized(flagx,flagy) = wndim(m+1,n+1);
% elseif u>0.5 & v<0.5
% Normalized(flagx,flagy) = wndim(m+1,n);
% elseif u<0.5 & v>0.5
% Normalized(flagx,flagy) = wndim(m,n+1);
% elseif u<0.5 & v<0.5
% Normalized(flagx,flagy) = wndim(m,n);
% end
Normalized(flagx,flagy) = round((1-u)*(1-v)*im(m,n) + (1-u)*v*im(m,n+1) + u*(1-v)*im(m+1,n) + u*v*im(m+1,n+1));
end
flagy = flagy+1;
end
flagx = flagx+1;
end
X = abs(minx);Y = abs(miny);
% mysize = min([maxx-minx,maxy-miny]);
% hlfsize = floor((mysize+1)/2)-5;
% hlfsize = 30;
% Normalized = Normalized(Xw(1,1)-hlfsize:Xw(1,1)+hlfsize,Xw(2,1)-hlfsize:Xw(2,1)+hlfsize);
% % Temp = Temp(Xw(1,1)-hlfsize:Xw(1,1)+hlfsize,Xw(2,1)-hlfsize:Xw(2,1)+hlfsize);
% [w,h] = size(Normalized);
% Xw = [floor(w/2)+1,floor(w/2)+1]';
3 仿真结果
4 参考文献
[1]彭启民, 贾云得. 基于各向异性扩散的图像分割算法[J]. 北京理工大学学报, 2005, 25(4):4.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
这篇关于【图像分割】基于各向异性热扩散方程的图像分割附matlab代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!