1.软件版本

matlab2021a

2.本算法理论知识

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

主要包含如下的步骤:

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

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

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

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

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

3.核心代码

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.操作步骤与仿真结论

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

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

 

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

 

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

 5.参考文献

 

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

A09-26