---来自百度,收藏
2011-4-18 13:11
最佳答案
POSHE 算法是在输入图像上定义一矩形子块,利用该子块图像的直方图信息对子块的所有像素进行直方图均衡化,将子块以一定的步长移动并重复以上处理过程,直至遍历输入图像的所有像素,对多次被均衡的像素,将均衡结果取平均作为该像素在输出图像中的灰度值。 下面的程序如何修改能够达到部分重叠的效果,图像运行后的白色的 clear;close all;clc; str = 'lena.bmp'; I = imread(str); figure,imshow(I),title('original image'); len = 5; hstep = 2; wstep = 2; for k = 1:size(I,3) img = I(:,:,k); img = [img(:,len:-1:2) img img(:,end-1:-1:end-len)]; img = [img(len:-1:2,:) ;img; img(end-1:-1:end-len,:)]; [h w] = size(img); med_out(:,:,k) = zeros(h,w); counts = zeros(h,w); for i =1:hstep:h if h-i >= len for j = 1:wstep:w if w-j >= len rect =histeq(img(i:i+len-1,j:j+len-1));%把图像块进行抛物线直方图均衡 med_out(i:i+len-1,j:j+len-1,k) = uint8(med_out(i:i+len-1,j:j+len-1,k))+rect; counts(i:i+len-1,j:j+len-1) = counts(i:i+len-1,j:j+len-1)+1; end end end end med_out1(:,:,k) = med_out(len+1:end-len-1,len+1:end-len-1,k); med_out1(:,:,k) = med_out1(:,:,k)./counts(len+1:end-len-1,len+1:end-len-1); out(:,:,k) = med_out1(:,:,k); end figure,imshow(out),title('poshe result');