zoukankan      html  css  js  c++  java
  • 图像的去雾与加雾

    本篇blog只是实现去雾与加雾最简单的方法,还有很多高级的,自动的方法,比如CLAHE (对比度有限的自适应直方图均衡)。Q1使用了一个小trick (直方图上累计更新)实现直方图均衡化达到增强图像对比度的目的,Q2先加入一些均匀白噪声,再用高斯滤波器去模糊化,实现提高大像素值的占比,直方图居中化的目的。

    Q1: 实现图像去雾的效果 (提高图像质量),如下:

    Solution:

    • Observations:

    The three-channel histograms of the original foggy image:

     Realize the histogram equalization for the image to improve the contrast degree.

    • Algorithm:

    Basic idea: Because the histograms of the three channels are similar, so considering all pixels together. Making all pixels as a list, then calculating all pixel-values frequency (probability) first. Notice that Most values are center in the middle, so we can make accumulated frequency to replace original frequency, which will fill the right-part frequencies. Now, the whole figure is brighter, so we can use a Gamma Transform to make it a little darker. The Gamma Transform formula is 255*(pix/255)^(γ).

    The pipeline as follows:

    • Result:

    The result of the third step in the flow graph:

    The final result:

    • Code:
    clc; clear all; close all;
    addpath('./question1_images/');
    fig1=imread('Ex_ColorEnhance.png');
    figure;
    subplot(1,2,1);imshow(fig1);title('original');
    subplot(1,2,2);imhist(fig1);title('original hist');
    
    [row,col,channel]=size(fig1);
    max_pix=255;
    % calculate pixels frequency
    mtx=fig1(:);
    mtx_freq=zeros(1,256);
    for i=1:length(mtx)
       mtx_freq(mtx(i)+1) = mtx_freq(mtx(i)+1)+1;
    end
    mtx_freq=mtx_freq/length(mtx);
    % calculate sum
    mtx_sum=zeros(1,256);
    mtx_sum(1)=mtx_freq(1);
    for j=2:256
        mtx_sum(j)=mtx_sum(j-1)+mtx_freq(j);
    end
    % get new fig
    result1=fig1;
    for k=1:channel
        for i=1:row
            for j=1:col
    %             result1(i,j,k)=mtx_sum(fig1(i,j,k)+1)*max_pix; % no Gamma correction
                result1(i,j,k)=power(mtx_sum(fig1(i,j,k)+1),1.4)*max_pix; %
    %             add Gamma correction, gamma=1.4
            end
        end
    end
    % show new fig
    result1=uint8(result1);
    figure; 
    subplot(1,2,1);imshow(result1);title('new');
    subplot(1,2,2);imhist(result1);title('new hist');
    

    Q2: 实现图像加雾的效果 (损害图像质量):

    Solution:

    • Observations:

    After observing the histogram of the original figure, if blur it, we need to concentrate the histogram.

    • Algorithm:

    (1) Add the same-value white noise uniformly every other pixel on the figure.

    (2) Run Gaussian filter on the whole figure twice, the kernel size is 3x3, and no padding.

    • Results:

    Before:

    After:

    • Code:
    clc; clear all; close all;
    addpath('./question1_images/');
    fig2=imread('Tam_clear.jpg');
    figure;
    subplot(1,2,1);imshow(fig2);title('original');
    subplot(1,2,2);imhist(fig2);title('original hist');
    result2=fig2;
    [row,col,channel] = size(fig2);
    % add white noise
    for k = 1:channel
     for i = 1:row
        for j = 1:col
            if mod(i,2)==0 && mod(j,2)==0
                result2(i,j,k) = 150; % add the same-value white noise uniformly every other pixel
            end
        end
     end
    end
    % add a Gaussian filter to blur the figure
    result2=double(result2);
    Gaussian_filter=1/16*[1 2 1; 2 4 2; 1 2 1];
    
    for times=1:2 % twice
       for k=1:channel
            for i=2:(row-1)
                for j=2:(col-1)
                    result2(i,j,k)=sum(sum(result2(i-1:i+1,j-1:j+1,k).*Gaussian_filter));
                end
            end
        end 
    end
    result2=uint8(result2);
    figure;
    subplot(1,2,1);imshow(result2);title('foggy');
    subplot(1,2,2);imhist(result2);title('foggy hist');
    

      

  • 相关阅读:
    4.12作业
    4.9上机作业
    第十周上级作业
    第九周上机作业
    第八周作业
    第八周上机作业
    第七周作业
    第七周上机练习
    第六周作业
    4.9上机练习
  • 原文地址:https://www.cnblogs.com/pear-linzhu/p/12820855.html
Copyright © 2011-2022 走看看