【图像分割】基于和声搜索算法实现图像多级阈值分割附matlab代码

本文涉及的产品
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,分割抠图1万点
视觉智能开放平台,图像资源包5000点
简介: 【图像分割】基于和声搜索算法实现图像多级阈值分割附matlab代码

1 内容介绍

本文介绍了一种基于和声搜索算法(HSA)的多级阈值(MT)算法。HSA 是一种进化方法,其灵感来自音乐家在演奏时即兴创作新的和声。与其他进化算法不同,HSA 展示了有趣的搜索能力,仍然保持较低的计算开销。所提出的算法将来自图像直方图中可行搜索空间的随机样本编码为候选解决方案,而考虑 Otsu 或 Kapur 方法所采用的目标函数来评估它们的质量。在这些目标值的指导下,候选解集通过 HSA 算子进行演进,直到找到最优解。实验结果证明了所提出的数字图像分割方法的高性能。

2 仿真代码


%Intructions:

% I -> Original Image, could be RGB or Gray Scale

% level -> Number of threshold to find

% This version works with KAPUR as fitness function.


close all

clear all


% Se carga la imagen RGB o escala de grises

I1 = imread('Picture 148710088.jpg');

I=rgb2gray(I1);

level = 3;


% 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; %number of thresholds (number of levels-1) (dimensiones)

ndim = N_PAR;  


%Parametros Harmony Search %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

MaxAttempt = 25000;  % Max number of Attempt

% Initial parameter setting

HS_size = 50;        %Length of solution vector

HMacceptRate = 0.95; %HM Accepting Rate

PArate = 0.5;        %Pitch Adjusting rate


if size(I,3) == 1

   %Imagen escala de grises

   range = ones(ndim,2);

   range(:,2) = range(:,2) * Lmax;

   

   %initializa harmony memory

   HM = zeros(HS_size,ndim);

   

   % Pitch range for pitch adjusting

   pa_range = ones(ndim);

   pa_range = pa_range * 100;

elseif size(I,3) == 3

   %Imagen RGB

   range = ones(ndim,2);

   range(:,2) = range(:,2) * Lmax;

   %IR

   xR = zeros(HS_size,ndim);

   %IG

   xG = zeros(HS_size,ndim);

   %IB

   xB = zeros(HS_size,ndim);

end



C_Func = 0;

tic

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

% Generating Initial Solution Vector

for i = 1:HS_size,

   for j = 1:ndim,

       x(j) = range(j,1) + (range(j,2) - range(j,1)) * rand;

   end

   x = fix(sort(x));

   HM(i, :) = x;

end %% for i


   %evalua x en la funcion objetivo

    %[HMbest, fitBestR] = fitnessIMG(I, HS_size, Lmax, level, HM, probR);

%     C_Func = length(HMbest);

   


   %evalua x en la funcion objetivo

   x = fix(sort(x));

   %evalua x en la funcion objetivo

   %[fbest, fitBestR] = fitnessIMG(I, 1, Lmax, level, x, probR);

   fbest = Kapur(1,level,x,probR);

   C_Func = C_Func + 1;

   

   

   % Find the best in the HS solution vector  

   [HStemp, ii] = sort(HMbest, 'descend'); %Maximiza

   HMbest = HMbest(ii);

   HM = HM(ii,:);

   

   % Updating the current solution if better

   if fbest > HMbest(HS_size), %maximiza

       HM(HS_size, :) = x;

       HMbest(HS_size) = fbest;

   end

   solution = x;   % Record the solution

   %Obtiene los mejores valores de cada attempt y los alamacena

   [mm,ii] = max(HMbest); %maximiza

   Fit_bests(count) = mm; %Mejores Fitness

   HS_elem(count,:) = HM(ii,1:ndim-1); %Mejores Elementos de HM

   HS_bestit = HM(ii,1:ndim-1); %Guarda el mejor HS

   HS_bestF = mm; %Guarda el mejor fitness

   

  % Output the results  to screen

  str=strcat('Best estimates: =',num2str(HS_bestit));

  str=strcat(str,'  fmin='); str=strcat(str,num2str(HS_bestF));

  str=strcat(str,'  Iteration='); str=strcat(str,num2str(count));

  disp(str);  

 

  %Save the best values that will be chek in the stop criterion

  if count == 1  || HS_bestF > HS_ant

       HS_ant = HS_bestF;

       cc = 0;

  elseif HS_bestF == HS_ant

       cc = cc + 1;

  end

 

  if cc > (MaxAttempt * 0.10)

      break;

  end

 

end %% for count (harmony search)

toc

%plot fitness

plot(Fit_bests)


%Prepare results to be show

gBestR = sort(HS_bestit);

   Iout = imageGRAY(I,gBestR);

   Iout2 = mat2gray(Iout);

   %Show results

   intensity = gBestR(1:ndim-1)    

   STDR =  std(Fit_bests)      %Standar deviation of fitness      

   MEANR = mean(Fit_bests)     %Mean of fitness

   PSNRV = PSNR(I, Iout)       %PSNR between original image I and the segmented image Iout

   Fit_bests(count)            %Best fitness

   %Show results on images

   figure

   subplot(121)

      imshow(I);title('原图')

   subplot(122)

   imshow(Iout);title('分割图')

 

   

   %Plot the threshold values over the histogram

   figure

   plot(probR)

   hold on

   vmax = max(probR);

   for i = 1:ndim-1

       line([intensity(i), intensity(i)],[0 vmax],[1 1],'Color','r','Marker','.','LineStyle','-')

       %plot(lineas(i,:))

       hold on

   end

    hold off


3 运行结果

4 参考文献

[1] Oliva D ,  Cuevas E ,  Pajares G , et al. Multilevel Thresholding Segmentation Based on Harmony Search Optimization[J]. Journal of Applied Mathematics, 2013, 2013:1-12.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


相关文章
|
2月前
|
算法 决策智能
基于禁忌搜索算法的VRP问题求解matlab仿真,带GUI界面,可设置参数
该程序基于禁忌搜索算法求解车辆路径问题(VRP),使用MATLAB2022a版本实现,并带有GUI界面。用户可通过界面设置参数并查看结果。禁忌搜索算法通过迭代改进当前解,并利用记忆机制避免陷入局部最优。程序包含初始化、定义邻域结构、设置禁忌列表等步骤,最终输出最优路径和相关数据图表。
|
2月前
|
算法 数据安全/隐私保护
织物图像的配准和拼接算法的MATLAB仿真,对比SIFT,SURF以及KAZE
本项目展示了织物瑕疵检测中的图像拼接技术,使用SIFT、SURF和KAZE三种算法。通过MATLAB2022a实现图像匹配、配准和拼接,最终检测并分类织物瑕疵。SIFT算法在不同尺度和旋转下保持不变性;SURF算法提高速度并保持鲁棒性;KAZE算法使用非线性扩散滤波器构建尺度空间,提供更先进的特征描述。展示视频无水印,代码含注释及操作步骤。
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
216 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
139 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
3月前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
105 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
13天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
19天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
7天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
7天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如"How are you"、"I am fine"、"I love you"等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。

热门文章

最新文章