• PS 图像调整算法——自动色阶 (Auto Levels)


    PS 给出的定义: 

    Enhance Per Channel Contrast:Maximizes the tonal range in each channel to produce a more dramatic correction.Because each channel is adjusted individually, Enhance Per Channel Contrast may remove or introduce color casts.The Auto Levels command uses this algorithm.

    简单来说,就是对R,G,B三个通道的动态范围分别进行拉伸。这个算法还要考虑一个 clipping percentage, 默认值是 0.1%。根据这个定义,可以先编写一个拉伸动态范围的函数:

    (函数中默认图像的动态范围是 0-1).

    if x<x_min:  y=0;

    if x>x_max:  y=1;

    if x_min < x< x_max:   y=(x-x_min)/(x_max-x_min); 


    function I_out=F_color(I, percent)

    %%% the tonal range of the input image is 0-1.
    [row, col]=size(I);
    I_sort=sort(I(:));
    I_out=I;

    %%% based on the clipping percentage, 
    %%% compute the upper and lower boundaries 

    if (percent==0)
        I_min=min(I_sort)
        I_max=max(I_sort)
    else
        I_min=I_sort(floor(row*col*percent))
        I_max=I_sort(floor(row*col*(1-percent)))
    end

    for i=1:row
        for j=1:col
                if(I(i,j)<I_min)
                    I_out(i,j)=I_min;
                elseif(I(i,j)>I_max)
                    I_out(i,j)=1;
                else
                    I_out(i,j)=(I(i,j)-I_min)*(1-I_min)/(I_max-I_min)+I_min;
                end
        end 
    end


    对三个通道分别进行拉伸,可以得到最终调整后的图像。

    clc;
    clear all;
    Image=imread('8.jpg');
    Image=double(Image)/255;
    imshow(Image);
    R=Image(:,:,1);
    G=Image(:,:,2);
    B=Image(:,:,3);
    percent=0.001;
    Image_out=Image;
    Image_out(:,:,1)=F_color(R, percent);
    Image_out(:,:,2)=F_color(G, percent);
    Image_out(:,:,3)=F_color(B, percent);
    figure, imshow(Image_out);


    原图:



    调整后的图:



  • 相关阅读:
    ES 内存深度解析
    Spring Cache介绍和使用
    mysql 索引及索引创建原则
    mysql中四种存储引擎的区别和选择
    Java中数组、List、Set互相转换
    COGS 1151 活动安排
    洛谷P1650赛马与codevs 2181 田忌赛马
    5月3日济南清北学堂随堂测试题目
    codevs 1206 保留两位小数
    codevs 1203 判断浮点数是否相等
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9412727.html
Copyright © 2020-2023  润新知