请选择 进入手机版 | 继续访问电脑版

Hello Mat

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1599|回复: 2

PSO的类间方差多阈值分割

[复制链接]

807

主题

953

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30287
发表于 2019-10-10 21:53:38 | 显示全部楼层 |阅读模式
PSO的类间方差多阈值分割
链接:https://pan.baidu.com/s/124_QX84EyUsBsS5ICMUD7w 提取码:1h76

具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1\

  1. clc,clear,close all
  2. warning off
  3. format longG
  4. tic;
  5. %% 问题背景,图像
  6. im = imread('car.bmp');
  7. im = imresize(im, [256,256]);
  8. if size(im,3)>1
  9.     im = rgb2gray(im);
  10. end
  11. figure(1),imshow(im,[])

  12. %% PSO 参数
  13. c1 = 1.4995;  
  14. c2 = 1.4995;
  15. Vmin = -5;
  16. Vmax = 5;
  17. maxiter = 50;  % 迭代次数
  18. sizepop = 50;  % 种群数量
  19. popmin = 0;  popmax = 255; % x
  20. level = 3;        % 3分割
  21. nvar = level-1;   % 2个待求阈值

  22. % 初始化种群
  23. for i=1:sizepop
  24.     pop(i,:) = popmin + fix( (popmax-popmin).*rand(1, nvar) );
  25.     pop(i,:) = sort(pop(i,:));
  26.     fitness(i) =  imageSegObj(im, pop(i,:), level );
  27.     V(i,1:nvar) = 0;
  28. end
  29. % 记录一组最优值
  30. [bestfitness,bestindex]=max(fitness);
  31. zbest=pop(bestindex,:);   % 全局最佳
  32. gbest=pop;                % 个体最佳
  33. fitnessgbest=fitness;     % 个体最佳适应度值
  34. fitnesszbest=bestfitness; % 全局最佳适应度值
  35. wmax = 0.9;  wmin = 0.4;
  36. % 迭代寻优
  37. for i=1:maxiter
  38.     for j=1:sizepop
  39.         % 自适应权重1
  40. %         w = wmin + (wmax-wmin)*(fitnessgbest(j)-min(fitness))/( max(fitness)-min(fitness) );
  41.         % 自适应权重2
  42. %         w = wmin - (wmax-wmin)*(fitnessgbest(j)-min(fitness))/( mean(fitness)-min(fitness) );
  43.         % 自适应权重3
  44.         if fitnessgbest(j)<=mean(fitness)
  45.             w = wmin - (wmax-wmin)*(fitnessgbest(j)-min(fitness))/( mean(fitness)-min(fitness) );
  46.         else
  47.             w = wmax;
  48.         end
  49.         % 速度更新
  50.         V(j,:) = w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
  51.         % V范围约束
  52.         V(j, find(V(j,:)>Vmax)) = Vmax;
  53.         V(j, find(V(j,:)<Vmin)) = Vmin;
  54.         % 个体更新
  55.         pop(j,:) = fix( pop(j,:) + 0.5 * V(j,:) );
  56.         
  57.         % x越界限制
  58.         pop(j, find(V(j,:)>popmax)) = popmax;
  59.         pop(j, find(V(j,:)<popmin)) = popmin;
  60.         
  61.         % 适应度更新
  62.         pop(j,:) = sort(pop(j,:));
  63.         fitness(j) = imageSegObj(im, pop(j,:), level );
  64.         
  65.         % 比较  个体间比较
  66.         if fitness(j)>fitnessgbest(j)
  67.             fitnessgbest(j) = fitness(j);
  68.             gbest(j,:) = pop(j,:);
  69.         end
  70.         if fitness(j)>bestfitness
  71.             bestfitness = fitness(j);
  72.             zbest =  pop(j,:);
  73.         end
  74.         
  75.     end
  76.     fitness_iter(i) = bestfitness;
  77.    
  78. end
  79. toc ;
  80. times = toc;
  81. fprintf('\n')
  82. disp(['计算时间 Time =    ',   num2str(times) ])
  83. fprintf('\n')
  84. zbest = sort(zbest);
  85. disp(['最优解   ', num2str(zbest)])
  86. fprintf('\n')

  87. figure('color',[1,1,1])
  88. plot(fitness_iter,'ro-','linewidth',2)

  89. %% 显示分割图像
  90. Iout = imageGray(im, zbest );
  91. figure('color',[1,1,1])
  92. imshow(Iout,[])
  93. colormap jet;
  94. axis equal
复制代码
适应度函数如下:
游客,如果您要查看本帖隐藏内容请回复


参考:【32】一维最大熵法进行2分割和3分割(MATLAB)


算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

0

主题

52

帖子

332

积分

中级会员

Rank: 3Rank: 3

积分
332
发表于 2020-6-20 22:06:11 | 显示全部楼层
非常好的代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn  

GMT+8, 2020-8-6 17:48 , Processed in 0.151255 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表