【图像分割】基于电磁算法优化多级阈值实现图像分割附matlab代码

简介: 【图像分割】基于电磁算法优化多级阈值实现图像分割附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机

⛄ 内容介绍

针对传统Kapur熵和oust在多阈值图像分割算法中存在运算量大、计算效率低以及精度不高等问题,提出了一种基于电磁算法的多级阈值图像分割方法,该方法采用Kapur熵作为计算适应度的目标函数,通过引入电磁算法求解目标函数最大化时的全局最优问题.实验结果表明:相对于其他方法,本文方法在多个评价指标上都有很好的性能体现,并且本文方法在保证较好分割效果的同时,计算效率明显提升.

⛄ 部分代码

%Diego Oliva, Erik Cuevas, Gonzalo Pajares, Daniel Zaldivar, Valent韓 Osuna.

%A Multilevel Thresholding algorithm using electromagnetism optimization

%Universidad Complutense de Madrid / Universidad de Guadalajara

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%The algorithm was published as:

%Diego Oliva, Erik Cuevas, Gonzalo Pajares, Daniel Zaldivar, Valent韓 Osuna.

%A Multilevel Thresholding algorithm using electromagnetism optimization,

%Journal of Neurocomputing, 139, (2014), 357-381.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%




function [fitR, fitBestR, fitG, fitBestG, fitB, fitBestB] = fitnessIMG(I, N, Lmax, level, xR, probR, xG, probG, xB, probB)

%Metodo de Otsu


%Evalua poblaciones xR, xG, xB, en la funcion objetivo para obtener

%fitR, fitG, fitB, dependiendo si la imagen es RGB o escala de grises

for j = 1:N

   if size(I,3) == 1

       %grayscale image

       fitR(j) = sum(probR(1:xR(j,1))) * (sum((1:xR(j,1)) .* probR(1:xR(j,1)) / sum(probR(1:xR(j,1)))) - sum((1:Lmax) .* probR(1:Lmax)) ) ^ 2;

       for jlevel = 2:level - 1

           fitR(j) = fitR(j) + sum(probR(xR(j,jlevel - 1) + 1:xR(j,jlevel))) * (sum((xR(j,jlevel - 1) + 1:xR(j,jlevel)) .* probR(xR(j,jlevel - 1) + 1:xR(j,jlevel)) / sum(probR(xR(j,jlevel - 1) + 1:xR(j,jlevel)))) - sum((1:Lmax) .* probR(1:Lmax))) ^ 2;

       end

       fitR(j) = fitR(j) + sum(probR(xR(j,level-1) + 1:Lmax)) * (sum((xR(j,level - 1) + 1:Lmax) .* probR(xR(j,level - 1) + 1:Lmax) / sum(probR(xR(j,level - 1) + 1:Lmax))) - sum((1:Lmax) .* probR(1:Lmax))) ^ 2;

%         if isnan(fitR(j))

%             fitR(j)=eps;

%         end

       fitBestR(j) = fitR(j);

     

   elseif size(I,3) == 3

       %RGB image

       fitR(j) = sum(probR(1:xR(j,1))) * (sum((1:xR(j,1)) .* probR(1:xR(j,1)) / sum(probR(1:xR(j,1)))) - sum((1:Lmax) .* probR(1:Lmax))) ^ 2;

       for jlevel = 2:level - 1

           fitR(j) = fitR(j) + sum(probR(xR(j,jlevel - 1) + 1:xR(j,jlevel))) * (sum((xR(j,jlevel - 1) + 1:xR(j,jlevel)) .* probR(xR(j,jlevel - 1) + 1:xR(j,jlevel)) / sum(probR(xR(j,jlevel - 1) + 1:xR(j,jlevel)))) - sum((1:Lmax) .* probR(1:Lmax))) ^ 2;

       end

       fitR(j) = fitR(j) + sum(probR(xR(j,level-1) + 1:Lmax)) * (sum((xR(j,level - 1) + 1:Lmax) .* probR(xR(j,level - 1) + 1:Lmax) / sum(probR(xR(j,level - 1) + 1:Lmax))) - sum((1:Lmax) .* probR(1:Lmax))) ^ 2;


       fitBestR(j) = fitR(j);

       

       fitG(j) = sum(probG(1:xG(j,1))) * (sum((1:xG(j,1)) .* probG(1:xG(j,1)) / sum(probG(1:xG(j,1)))) - sum((1:Lmax) .* probG(1:Lmax))) ^ 2;

       for jlevel = 2:level - 1

           fitG(j) = fitG(j) + sum(probG(xG(j,jlevel - 1) + 1:xG(j,jlevel))) * (sum((xG(j,jlevel - 1) + 1:xG(j,jlevel)) .* probG(xG(j,jlevel - 1) + 1:xG(j,jlevel)) / sum(probG(xG(j,jlevel - 1) + 1:xG(j,jlevel)))) - sum((1:Lmax) .* probG(1:Lmax))) ^ 2;

       end

       fitG(j) = fitG(j) + sum(probG(xG(j,level - 1) + 1:Lmax)) * (sum((xG(j,level-1) + 1:Lmax) .* probG(xG(j,level - 1) + 1:Lmax) / sum(probG(xG(j,level - 1) + 1:Lmax))) - sum((1:Lmax) .* probG(1:Lmax))) ^ 2;

       fitBestG(j) = fitG(j);

       

       fitB(j) = sum(probB(1:xB(j,1))) * (sum((1:xB(j,1)) .* probB(1:xB(j,1)) / sum(probB(1:xB(j,1)))) - sum((1:Lmax) .* probB(1:Lmax))) ^ 2;

       for jlevel = 2:level - 1

           fitB(j) = fitB(j) + sum(probB(xB(j,jlevel - 1) + 1:xB(j,jlevel))) * (sum((xB(j,jlevel - 1) + 1:xB(j,jlevel)) .* probB(xB(j,jlevel - 1) + 1:xB(j,jlevel)) / sum(probB(xB(j,jlevel - 1) + 1:xB(j,jlevel)))) - sum((1:Lmax) .* probB(1:Lmax))) ^ 2;

       end

       fitB(j) = fitB(j) + sum(probB(xB(j,level - 1) + 1:Lmax)) * (sum((xB(j,level - 1) + 1:Lmax) .* probB(xB(j,level - 1) + 1:Lmax) / sum(probB(xB(j,level - 1) + 1:Lmax))) - sum((1:Lmax) .* probB(1:Lmax))) ^ 2;

       fitBestB(j) = fitB(j);

   end

end

 if size(I,3) == 1

     %Imagen escala de Grises

       fitR = fitR';

       fitBestR = fitBestR';

 elseif size(I,3) == 3

     % Imagen RGB

       fitR = fitR';

       fitBestR = fitBestR';

       fitG = fitG';

       fitBestG = fitBestG';

       fitB = fitB';

       fitBestB = fitBestB';

 end

⛄ 运行结果

⛄ 参考文献

[1]康丽锋, 吴锋. 基于乌鸦搜索优化算法的多级阈值图像分割方法[J]. 西南师范大学学报:自然科学版, 2021, 46(1):6.

[2]孙研. 基于智能优化算法的多阈值图像分割技术及其并行加速[D]. 南京理工大学, 2014.

❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除


相关文章
|
3月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
395 0
|
3月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
210 8
|
3月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
228 8
|
3月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
178 0
|
3月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
148 0
|
3月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
147 0
|
3月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
225 8
|
3月前
|
机器学习/深度学习 数据采集 测试技术
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
基于CEEMDAN-VMD-BiLSTM的多变量输入单步时序预测研究(Matlab代码实现)
133 8
|
3月前
|
编解码 运维 算法
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
205 12
|
3月前
|
人工智能 数据可视化 网络性能优化
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)
166 9

热门文章

最新文章