差分进化算法在图像处理中的应用研究(Matlab代码实现)

简介: 差分进化算法在图像处理中的应用研究(Matlab代码实现)

💥1 概述

本文为Storn和Price制定的著名差分进化计算智能算法的实现。该算法使用Otsu准则作为适应度函数,可用于使用多个阈值对灰度图像进行阈值设置。


该程序旨在生成任何灰度图像的0到255级直方图,然后尝试找到阈值,在该阈值下,图像可以最佳地分离为属于图像前景的像素和属于图像背景的像素。最佳阈值的评估使用Otsu标准进行,阈值的Otsu适应度作为“类间方差”返回。值越高,适合度越好。差分进化保持生成1到256范围内的阈值,并评估图像的阈值的适合性。使用突变和交叉,一代又一代地选择更为理想的阈值。用户可以选择运行多个试验,并选择这些试验中的最佳阈值,并显示分割图像以及直方图和阈值的位置。


📚2 运行结果

🎉3 参考文献

[1]刘波,王凌,金以慧.差分进化算法研究进展[J].控制与决策,2007(07):721-729.DOI:10.13195/j.cd.2007.07.3.liub.001.

👨‍💻4 Matlab代码

主函数部分代码:

% This is the main file for running Differential Evolution
clc;clear all;close all;
images = {'lena_gray.png', 'barbara_gray.bmp'};
imgName = char(images(1));
infor = imfinfo(imgName);
disp(infor);
[I, colormap] = imread(imgName);
if isempty(colormap), I = rgb2gray(I); else I = ind2gray(I, colormap);end
I = im2uint8(I);
searchSpace = imhist(I);
%-----Control panel
thresh = 8;%the number of thresholds
population = 30;%the number of vectors
masterBeta = 2.0;%beta is real number belongs to [0 -> 2]
cr = 0.3;%crossover probability range [0 -> 1]
generations = 200;
numTrials = 1;
if population < 4, disp('Population should be more than 3');return;end
minThresh = 1; maxThresh = numel(searchSpace);
figNum = 1;
figure(figNum);clf;figNum=figNum+1;imshow(I);title('Original image');
%figure(figNum);clf;figNum=figNum+1;imhist(I);title(strcat('histogram of : ',imgName));
%OtsuThreshold = graythresh(I);II = im2bw(I);imshow(II);title('Otsu thresholded image');
runtime = [];
fitStore = [];
bestThresholdAmongTrials = [];
bestFitnessAmongTrials = 0;
tempBestFitnessAmongTrials = 0;
fastestGenerationForBestFitness = 0;
for aTrial = 1:numTrials  
tic;
tempFitStore = [];
vBeta = masterBeta;%variable beta
fprintf('Trial: %d\n', aTrial);
X = floor(minThresh + (maxThresh - minThresh) * rand(thresh, population));
U = X;
generationAtBestFit = [0 0];%stores generation and best fitness
spaceSize = size(searchSpace, 1);
totalPixels = sum(searchSpace);
normProba = searchSpace ./ totalPixels;%normalized probabilities
if thresh < 1 || thresh > spaceSize, disp('Thresholds should be in a range of 1 to 256');return;end
%-----Get an initial Fitness
[fitnessX, X] = OtsuFitness(X, spaceSize, totalPixels, normProba);
[val, fittest] = max(fitnessX);
相关文章
|
5月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
529 0
|
5月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
343 2
|
5月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
265 8
|
5月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
307 8
|
5月前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
278 0
|
5月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
242 0
|
5月前
|
存储 监控 并行计算
目标跟踪中常用点迹航迹数据关联算法的MATLAB实现
通过计算测量点与预测点之间的欧氏距离,选择最近邻点进行关联,适用于单目标跟踪场景。
|
5月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
512 0
|
5月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
186 0
|
5月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
207 0