[유전자 포그 이미지] 유전자 알고리즘 임계값 분할 기반 포그 이미지 향상 알고리즘의 Matlab 시뮬레이션

1. 소프트웨어 버전

매트랩2021a

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

추천

출처blog.csdn.net/ccsss22/article/details/124418800