• 大小: 1KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-05-15
  • 语言: Matlab
  • 标签: matlab  AHE  

资源简介

在matlab中实现了自适应直方图均衡(AHE),亲测有效。

资源截图

代码片段和文件信息

%this is the main function
clear
clc;
img=((imread(‘24.jpg‘)));
figure;
imshow(img);
result=ahe(img8150);
figure;
imshow(result);

disp ‘done‘;
%%
function img_new=ahe(imggridlimit) 
    
    img_new=img; %img_new is the img after AHE
    [mn]=size(img);  
    
    %ECR
    
    grid_cols=grid;
    grid_rows=grid;

    grid_width=int32(fix(m/grid_cols));
    grid_height=int32(fix(n/grid_rows));
    
    map=zeros(grid_colsgrid_rows256);
    
    %for each gridwe create their mapping function
    for i=1:grid_cols
        for j=1:grid_rows
            map(ij:)=MakeHistogram(img1+(i-1)*grid_width1+(j-1)*grid_heightgrid_widthgrid_heightlimit); 
        end
    end
    %interpolate
    %boundary cases I followed the Karel Zuiderveld‘s implement(C version)
    xi = 1; 
    for i = 1:grid_cols+1 
        if i == 1 
            subx = grid_width/2; 
            xu = 1; 
            xd = 1; 
        elseif i == grid_cols+1 
            subx = grid_width/2; 
            xu =  grid_cols; 
            xd =  grid_cols; 
        else 
            subx = grid_width; 
            xu = i - 1; 
            xd = i; 
        end 
        yi = 1; 
        for j = 1:grid_rows+1
            if j == 1 
                suby = grid_height/2; 
                yl = 1; 
                yr = 1; 
            elseif j == grid_rows+1
                suby = grid_height/2; 
                yl = grid_rows; 
                yr = grid_rows; 
            else 
                suby = grid_height; 
                yl = j - 1; 
                yr = j; 
            end 
            UL = map(xuyl:); 
            UR = map(xuyr:); 
            DL = map(xdyl:); 
            DR = map(xdyr:); 

            subimg = img(xi:xi+subx-1yi:yi+suby-1); 
            subimg = Interpolate(subimgULURDLDRsubxsuby); 
            img_new(xi:xi+subx-1yi:yi+suby-1) = subimg; 
            yi = yi + suby; 
        end 
        xi = xi + subx; 
    end 
end

%%
function map=MakeHistogram(imgstartxstartywidthheightlimit) 
%make histogram
hist=zeros(1256); 
        for i=startx:startx+width-1 
            for j=starty:starty+height-1
                value=img(ij);
                hist(value+1)=hist(value+1)+1;
            end 
        end 
%clip and allienate noise

        if (limit>0)
        excess = 0; 
        %get the excess
        for degree = 1:256 
            excess=excess+max(0hist(degree)-limit); 
        end 
        ts=limit-excess/256;
        avginc=excess/256;
        %cut them and compensate other gray level
        for degree=1:256
            if (hist(degree)>limit)
                hist(degree)=limit;
            end
            %when compensatingshould not larger than limit
            if (hist(degree)>ts)
                excess=excess-(limit-hist(degree));
                hist(degree)=limit;
            else
                hist(degree)=hist(deg

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4292  2019-04-07 21:37  two.m

评论

共有 条评论