• 【图像增强】基于麻雀搜索算法与双伽马校正的图像自适应增强算法Matlab代码


    1 内容介绍

    在一些特殊的应用场合,数字图像经常存在混合干扰和对比度弱等情况,导致图像处理难度升高.为更好的描述这些图像局部特征,改善信息分析的可用性,提出了基于麻雀搜索算法与双伽马校正的​图像自适应增强算法.​

    2 部分代码

    function [fMin , bestX, Convergence_curve] = SSA(X, N, M, c, d, dim, fobj)

    P_percent = 0.2;    % 发现者的种群规模占总种群规模的百分比

    pNum = round(N*P_percent);    % 发现者数量20%

    SD = pNum/2;      % 警戒者数量10%

    ST = 0.8;           % 安全阈值

    lb = c.*ones(1, dim);     % 下限

    ub = d.*ones(1,dim);    % 上限

    % 初始化

    for i = 1:N

    %     X(i, :) = lb + (ub - lb) .* rand(1, dim);

        fitness(i) = fobj(X(i, :));

    end

    pFit = fitness;

    pX = X;                            % 与pFit相对应的个体最佳位置

    [fMin, bestI] = min(fitness);      % fMin表示全局最优解

    bestX = X(bestI, :);             % bestX表示全局最优位置

    %% 迭代寻优

    for t = 1 : M       

        [~, sortIndex] = sort(pFit);            % 排序

        

        [fmax, B] = max(pFit);

        worst = X(B, :);

        

        %% 发现者位置更新

        r2 = rand(1);

        if r2 < ST

            for i = 1:pNum      % Equation (3)

                r1 = rand(1);

                X(sortIndex(i), :) = pX(sortIndex(i), :)*exp(-(i)/(r1*M));

                X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);

                fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));

            end

        else

            for i = 1:pNum

                X(sortIndex(i), :) = pX(sortIndex(i), :)+randn(1)*ones(1, dim);

                X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);

                fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));

            end

        end

        

        [~, bestII] = min(fitness);

        bestXX = X(bestII, :);

        

        %% 跟随者位置更新

        for i = (pNum+1):N                     % Equation (4)

            A = floor(rand(1, dim)*2)*2-1;

            if i > N/2

                X(sortIndex(i), :) = randn(1)*exp((worst-pX(sortIndex(i), :))/(i)^2);

            else

                X(sortIndex(i), :) = bestXX+(abs((pX(sortIndex(i), :)-bestXX)))*(A'*(A*A')^(-1))*ones(1, dim);

            end

            X(sortIndex(i), :) = Bounds(X(sortIndex(i), :), lb, ub);

            fitness(sortIndex(i)) = fobj(X(sortIndex(i), :));

        end

        

        %% 警戒者位置更新

        c = randperm(numel(sortIndex));

        b = sortIndex(c(1:SD));

        for j = 1:length(b)      % Equation (5)

            if pFit(sortIndex(b(j))) > fMin

                X(sortIndex(b(j)), :) = bestX+(randn(1, dim)).*(abs((pX(sortIndex(b(j)), :) -bestX)));

            else

                X(sortIndex(b(j)), :) = pX(sortIndex(b(j)), :)+(2*rand(1)-1)*(abs(pX(sortIndex(b(j)), :)-worst))/(pFit(sortIndex(b(j)))-fmax+1e-50);

            end

            X(sortIndex(b(j)), :) = Bounds(X(sortIndex(b(j)), :), lb, ub);

            fitness(sortIndex(b(j))) = fobj(X(sortIndex(b(j)), :));

        end

        

        for i = 1:N

            % 更新个体最优

            if fitness(i) < pFit(i) 

                pFit(i) = fitness(i);

                pX(i, :) = X(i, :);

            end

            % 更新全局最优

            if pFit(i) < fMin

                fMin = pFit(i);

                bestX = pX(i, :);

            end

        end

        Convergence_curve(t) = fMin;

        

        disp(['SSA: At iteration ', num2str(t), ' ,the best fitness is ', num2str(fMin)]);

    end

    %% 边界处理

    function s = Bounds(s, Lb, Ub)

    % 下界

    temp = s;

    I = temp < Lb;

    temp(I) = Lb(I);

    % 上界

    J = temp > Ub;

    temp(J) = Ub(J);

    % 更新

    s = temp;

    3 运行结果

    4 参考文献

    [1]严素清, 肖建明. 基于MatLab的图像增强算法研究[J]. 现代计算机:中旬刊, 2013(7):3.

    [2]袁丽婷. 基于Matlab的医学图像增强与边缘检测算法的实验研究[D]. 第四军医大学, 2009.

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

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

  • 相关阅读:
    外包干了3个月,技术退步明显
    3.ubuntu20.04环境的ros搭建
    chapter 8 in C primer plus
    【AI理论学习】语言模型:深入理解GPT-2计算掩码自注意力过程,了解GPT-3工作原理
    DM_SQL
    Linux Shell脚本自动化编程实战【1.4 shell特性 Login Nologin】
    MOS管特性及其几种常用驱动电路详解,电子工程师手把手教你
    JAVA基础学习笔记(4) 程序控制结构
    @Transient注解
    【剑指Offer】45. 把数组排成最小的数
  • 原文地址:https://blog.csdn.net/matlab_dingdang/article/details/126850459