圖像增強序列——基於多尺度形態學亮top-hat變換和暗top-hat變換圖像增強

1. 參考文獻


2. 算法實現

% 參考文獻: 多尺度top-hat 變換提取細節的對比度增強算法
% 作者: 劉豔莉, 桂志國
% http://www.docin.com/p-1457027092.html
% Author: HSW
% Date: 2018-04-25
%

clc;
close all;
clear all;

% img = imread('lena.jpg');
img = imread('rice.png'); 

figure(1);
imshow(img, []);
title('原始圖像');

if size(img, 3) == 3
    img_in = rgb2gray(img);
else
    img_in = img;
end

img_in = im2double(img_in);

N = 3; %多尺度的個數
% 創建多尺度亮top-hat變換:WTHs 用於提取亮細節特徵
% 創建多尺度暗top-hat變換: BTHs 用於提取暗細節特徵
% 尺度由小到大
SEsSize = [3, 5, 7];
SEs = cell(1, N);
for i = 1:N
    SEs{i} = strel('disk', SEsSize(i));
end

% WTHs 和 BTHs
WTHs = cell(1, N);
BTHs = cell(1, N);
sum = 0;
for i = 1:N
    WTHs{i} = img_in - imopen(img_in, SEs{i});  % imtophat(img_in, SEs{i});
    BTHs{i} = imclose(img_in, SEs{i}) - img_in; % imbothat(img_in, SEs{i});
    sum  = sum + i;
end

% 尺度相關歸一化因子係數: lambda(i) = (N - i + 1) / sum 
% 細節增強增益控制係數:k 
k = 0.5; 
tmp = 1:N; 
lambda = (N - tmp + 1) / sum; 
img_out1 = img_in;
for i = 1:N
    img_out1 = img_out1 + k * lambda(i) * (WTHs{i} - BTHs{i});
end

figure(2);
imshow(img_out1, []);
title('多尺度形態學圖像增強結果');

% 論文形態學圖像增強
Dops = cell(1, N);
Dcls = cell(1, N);
for i = 1:N
    if i == 1
        Dops{i} = WTHs{i};
        Dcls{i} = BTHs{i};
    else
        Dops{i} = WTHs{i-1} - WTHs{i};
        Dcls{i} = BTHs{i} - BTHs{i-1};
    end
end

% 等比例控制因子:lambdai = 1 / N
% 細節增強增益控制係數:k
k = 0.5; 
img_out2 = img_in;
for i = 1:N
    img_out2 = img_out2 + k * ( 1.0 / N * (Dops{i} - Dcls{i}));
end

figure(3);
imshow(img_out2, []);
title('等比例形態學圖像增強結果');

% 基於梯度自適應調整的控制因子: lambda
% 梯度響應控制參數:sigma 
sigma = 1.5;
g = cell(1, N);
g_max = zeros(1, N);
g_min = zeros(1, N);
for i = 1:N
    g{i} = imdilate(img_in, SEs{i}) - imerode(img_in, SEs{i}); % 形態學梯度: 膨脹 - 腐蝕
    g_max(i) = max(max(g{i}));
    g_min(i) = min(min(g{i}));
end

lambda = cell(1, N);
for i = 1:N
    tmp = g{i} - (g_max(i) + g_min(i)) / 2;
    lambda{i} = 1 ./ (1 + exp(-sigma .* tmp));
end

% 歸一化lambda係數
lambdaNormal = cell(1,N);
tmp = zeros(size(lambda{i}));
for j = 1:N
    tmp = tmp + lambda{i};
end

for i = 1:N
    lambdaNormal{i} = lambda{i} ./ tmp;
end

img_out3 = img_in;
for i = 1:N
    img_out3 = img_out3 + k * (lambdaNormal{i} .* (Dops{i} - Dcls{i}));
end

figure(4)
imshow(img_out3, []);
title('自適應形態學圖像增強');

3. 模型效果(代碼默認參數不一定是最優,視覺上的圖像有增強的效果)



發佈了131 篇原創文章 · 獲贊 99 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章