【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)

简介: 【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

💥1 概述

文献来源:

image.gif 编辑

摘要:

使用电磁学优化的多阈值分割算法是图像处理中的一个重要任务。它包括根据像素的强度级别和阈值将像素分类为两个或多个组。分割的质量取决于选择阈值的方法。由于经典的多阈值分割实现在寻找最优值以优化目标函数时具有计算上的昂贵性,因此已经推广了使用优化进化方法。电磁学优化算法(EMO)是一种模拟电荷之间的吸引和排斥机制以进化种群成员的进化方法。与其他算法不同,EMO表现出有趣的搜索能力,同时保持了低计算开销。本文介绍了一种基于EMO的多阈值分割(MT)算法。该方法将EMO算法的良好搜索能力与Otsu和Kapur等流行MT方法提出的目标函数相结合。该算法从图像直方图中的可行搜索空间中随机抽样。这些样本构建了EMO上下文中的每个粒子,其质量是根据Otsu或Kapur方法使用的目标函数评估的。在这些目标值的指导下,候选解集通过EMO操作符进化,直到找到最优解。该方法生成了一种多阈值分割算法,可以在较少的迭代次数内有效地识别数字图像的阈值。实验结果显示了EMO用于数字图像分割的实现性能证据。

本文介绍了一种基于EMO算法的分割方法,称为基于EMO算法的多阈值分割(MTEMO)。该算法从取决于图像直方图的可行搜索空间中随机抽取样本。这些样本构建了EMO上下文中的每个粒子。每个粒子的质量是根据Otsu或Kapur方法使用的目标函数评估的。在这一目标值的指导下,候选解集使用吸引力-排斥操作符进化。该方法生成了一种多阈值分割算法,可以在较少的迭代次数内有效地识别数字图像的阈值,并降低了原始提案的计算复杂性。实验结果表明,EMO用于数字图像分割的实施性能证据。本文其余部分安排如下。第2节介绍了标准的EMO算法。第3节简要描述了Otsu和Kapur方法。第4节解释了所提出算法的实现。第5节在一组基准图像中测试MTEMO后讨论了实验结果和比较。最后,第6节总结了本工作。

📚2 运行结果

image.gif 编辑

image.gif 编辑

image.gif 编辑

image.gif 编辑

部分代码:

function [Iout] = MTHEMO(I,level)

% Se obtienen los histogramas si la imagen es RGB uno por cada canal si es

% en escala de grises solamente un historgrama.

if size(I,3) == 1 %grayscale image

   [n_countR, x_valueR] = imhist(I(:,:,1));

elseif size(I,3) == 3 %RGB image

   %histograma para cada canal RGB

   [n_countR, x_valueR] = imhist(I(:,:,1));

   [n_countG, x_valueG] = imhist(I(:,:,2));

   [n_countB, x_valueB] = imhist(I(:,:,3));

end

Nt = size(I,1) * size(I,2); %Cantidad total de pixeles en la imagen RENG X COL

%Lmax niveles de color a segmentar 0 - 256

Lmax = 256;   %256 different maximum levels are considered in an image (i.e., 0 to 255)

% Distribucion de probabilidades de cada nivel de intensidad del histograma 0 - 256

for i = 1:Lmax

   if size(I,3) == 1

       %grayscale image

       probR(i) = n_countR(i) / Nt;

   elseif size(I,3) == 3

       %RGB image    

       probR(i) = n_countR(i) / Nt;

       probG(i) = n_countG(i) / Nt;

       probB(i) = n_countB(i) / Nt;

   end

end

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

% Parametros del problema de segmentacion

N_PAR = level  - 1; %number of thresholds (number of levels-1) (dimensiones)

dim = N_PAR;  

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

%Parametros de la poblacion

%maximo de iteraciones

MAXITER = 200;

%m cantidad de puntos, n dimensiones en las cuales se trabaja

m = 50; %cantidad de miembros de la poblacion

n = dim; %dimensiones del problema

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

for ii = 1:1%35  % for para pruebas estadisticas

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

%Parametros del espacio de busqueda

%Crea el espacio de busqueda

%u -> vector de limites superiores de cada dimension

%l -> vector de limites inferiores de cada dimension

%xR, xG, xB -> poblaciones inicializadas en cero

if size(I,3) == 1

   % Imagen en escala de grises

   u = ones(1,dim) * Lmax;

   l = ones(1,dim);

   xR = zeros(m,n);

elseif size(I,3) == 3

   % Imagen RGB

   u = ones(1,dim) * Lmax;

   l = ones(1,dim);

   %uR = ones(1,dim) * Lmax;

   %lR = ones(1,dim);

   xR = zeros(m,n);

   %uG = ones(1,dim) * Lmax;

   %lG = ones(1,dim);

   xG = zeros(m,n);

   

   %uB = ones(1,dim) * Lmax;

   %lB = ones(1,dim);

   xB = zeros(m,n);

end

   

     

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

   %EMO Original               %%Version 4%%%

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

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

   %Generar y evaluar la poblacion que sera evolucionada durante la optimizacion

   %se generan m valores aleatorios y se evaluan en la funcion de fitness Ec. 4      

   if size(I,3) == 1

       % Imagen en escala de grises

       % Inicializacion aleatoria

       xR = incializa(m,n,u,l,xR);

       for si=1:length(xR)

          xR(si,:)=sort(xR(si,:));

       end

       % Evaluar poblacion en la funcion de fitness

       [fitR, fitBestR] = fitnessIMG(I, m, Lmax, level, xR, probR);

       

       % Elige el mejor elemento de la poblacion en base al fitness

       [aR, bR] = max(fitR); %Maximiza

       xBestR = xR(bR, :);

       fxBestR = fitR(bR);

       

   elseif size(I,3) == 3

       % Imagen RGB

       % Inicializacion aleatoria para cada canal R, G, B

       xR = incializa(m,n,u,l,xR);

       xG = incializa(m,n,u,l,xG);

       xB = incializa(m,n,u,l,xB);

       % Evalua la poblacion de cada canal en la funcion de fitness

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

       

       % Se elige el mejor elemento de cada poblacion en base al fitness

       [aR,bR] = max(fitR); %maximiza

       xBestR = xR(bR, :);

       fxBestR = fitR(bR);

       

       [aG,bG] = max(fitG); % maximiza

       xBestG = xG(bG, :);

       fxBestG = fitG(bG);

       

       [aB,bB] = max(fitB); % maximiza

       xBestB = xB(bR, :);

       fxBestB = fitR(bR);

   end

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

   %delta -> valor de vecindad de busqueda

   %LSITER -> valor  maximo de iteraciones para la busqueda

   delta = 0.025;

   LSITER = 4;

   cc = 0;

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献

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

热门文章

最新文章