【遗传雾天图像】基于遗传算法阈值分割的雾天图像增强算法matlab仿真

1.软件版本

matlab2021a

2.本算法理论知识

将遗传算法应用于雾天图像的区域分割,从而使图像清化.该方法首先用遗传算法求出近景和远景的分割阈值将图像分割出来,然后通过移动模板对整个图像进行相应的清晰化处理,防止区域边界效应的产生,最后对获取的图像进行信息融合,进一步提高图像质量,有效改善雾天图像的退化现象,提高图像的清晰度.

主要包含如下的步骤:

·遗传算法求出近景和远景的分割阈值将图像分割出来

·通过移动模板对整个图像进行相应的清晰化处理

·最后对获取的图像进行信息融合

  关于这个论文的详细理论,你可以参考我们提供的如下的参考文献:

3.核心代码

扫描二维码关注公众号,回复: 13990184 查看本文章
clc;
clear;
close all;
warning off;

%全局变量的定义
globals


%读取图片
A = imread('PIC\1.bmp');
B=rgb2gray(A);  
figure;
subplot(121);
imshow(B);title('原雾图')

C=B;
%加载函数路径
addpath 'functions'  
%%
%该方法首先用遗传算法求出近景和远景的分割阈值将图像分割出来
%该方法首先用遗传算法求出近景和远景的分割阈值将图像分割出来,
%该方法首先用遗传算法求出近景和远景的分割阈值将图像分割出来,

lchrom        = 8;        %染色体长度
popsize       = 10;       %种群大小
cross_rate    = 0.7;      %交叉概率
mutation_rate = 0.4;      %变异概率
maxgen        = 150;      %最大代数
[m,n]         = size(C);


%初始种群
func_initpop;  

%遗传操作
for gen=1:maxgen
    func_fitness_order();  %计算适应度值及排序
    func_select();         %选择操作
    func_crossover();      %交叉
    func_mutation();       %变异
end
%最佳阈值
Level = floor(yuzhi(1,maxgen));

[m,n]=size(C);
for i=1:m
    for j=1:n
        if C(i,j) <= Level
            C(i,j)=0;
        else
            C(i,j)=255;
        end
    end
end
subplot(122);
imshow(C);
title('根据遗传算法得到的阈值分割后的雾图'); 
%%
 
%%
%然后通过移动模板对整个图像进行相应的清晰化处理,防止区域边界效应的产生,
%然后通过移动模板对整个图像进行相应的清晰化处理,防止区域边界效应的产生,
%然后通过移动模板对整个图像进行相应的清晰化处理,防止区域边界效应的产生,
%分别报出分割后的两个部分的图像
Near = zeros(m,n);
Far  = zeros(m,n);
for i=1:m
    for j=1:n
        if C(i,j) == 0%近图
           Near(i,j) = B(i,j);
        end
        if C(i,j) == 255%远图
           Far(i,j) = B(i,j);
        end        
    end
end

Near2 = zeros(m,n);
Far2  = zeros(m,n);
FF    = zeros(m,n);
FF2   = zeros(m,n);
%假设移动模块的大小为4*4
WIN = 1;
a1  = 0.4;%处理前后两个图片的所占权重
a2  = 0.7;%处理前后两个图片的所占权重

Bmax = max(max(B));
r    = Level/double(Bmax);

for i=1:m/WIN
    for j=1:n/WIN
        s1 = (i-1)*WIN+ceil(WIN/2);
        s2 = (j-1)*WIN+ceil(WIN/2);
        if C(s1,s2) == 0%近图
           tmp1 = Near((i-1)*WIN + 1 : i*WIN,(j-1)*WIN + 1 : j*WIN);
           FF((i-1)*WIN + 1 : i*WIN,(j-1)*WIN + 1 : j*WIN) = 1.05*tmp1;
        end
        if C(s1,s2) == 255%远图
           tmp2 = Far((i-1)*WIN + 1 : i*WIN,(j-1)*WIN + 1 : j*WIN);
           %进行增强
           FF((i-1)*WIN + 1 : i*WIN,(j-1)*WIN + 1 : j*WIN) = double((tmp2 - 130*ones(WIN,WIN)*r)/(1 - r));
        end  
    end
end
figure;
subplot(121);
imshow(B);title('原雾图')
subplot(122);
imshow(uint8(FF));title('处理后的雾图')
%%
%%
%最后对数据进行融合
%最后对数据进行融合
%最后对数据进行融合
for i=1:m
    for j=1:n
        if C(i,j) == 0%近图
           FF2(i,j) = a1*FF(i,j)+(1-a1)*B(i,j);
        end
        if C(i,j) == 255%远图
           FF2(i,j) = a2*FF(i,j)+(1-a2)*B(i,j);
        end        
    end
end
 
figure;
subplot(121);
imshow(B);title('原雾图')
subplot(122);
imshow(uint8(FF2));title('处理后的雾图')
%%

4.操作步骤与仿真结论

★遗传算法求出近景和远景的分割阈值将图像分割出来

 

 

 5.参考文献

 

A09-26

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/124418800