遗传雾天图像基于遗传算法阈值分割的雾天图像增强算法matlab仿真
Posted fpga&matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了遗传雾天图像基于遗传算法阈值分割的雾天图像增强算法matlab仿真相关的知识,希望对你有一定的参考价值。
1.软件版本
matlab2021a
2.本算法理论知识
将遗传算法应用于雾天图像的区域分割,从而使图像清化.该方法首先用遗传算法求出近景和远景的分割阈值将图像分割出来,然后通过移动模板对整个图像进行相应的清晰化处理,防止区域边界效应的产生,最后对获取的图像进行信息融合,进一步提高图像质量,有效改善雾天图像的退化现象,提高图像的清晰度.
主要包含如下的步骤:
·遗传算法求出近景和远景的分割阈值将图像分割出来
·通过移动模板对整个图像进行相应的清晰化处理
·最后对获取的图像进行信息融合
关于这个论文的详细理论,你可以参考我们提供的如下的参考文献:
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.操作步骤与仿真结论
★遗传算法求出近景和远景的分割阈值将图像分割出来
5.参考文献
A09-26
以上是关于遗传雾天图像基于遗传算法阈值分割的雾天图像增强算法matlab仿真的主要内容,如果未能解决你的问题,请参考以下文章
阙值分割基于matlab遗传算法自适应多阈值图像分割含Matlab源码 1460期