为什么POSHE均衡化算法程序出现的图像是黑色的

为什么POSHE均衡化算法程序出现的图像是黑色的,第1张

直方图均衡化是专门对于灰度图像而言的处理算法,所以你得先转化为灰度图像,具体程序如下: a=imread('e:\bjpg');%读取图像 b=rgb2gray(a); %转化为灰度图像 imshow(b); %显示原图 c=histeq(b); %直方图均衡化 subplot(121),imshow(a); subplo

clear;

I = imread('E:\ebook\lenabmp');

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,:)];%%其实就是图像扩展,参考wextend函数,当然你的方法也可以

[h w] = size(img);

med_out(:,:,k) = int16(zeros(h,w));%%转化成int16型数据,原因下面会说明

counts = zeros(h,w);

for i =1:hstep:h

if h-i >= len

for j = 1:wstep:w

if w-j >= len

rect =int16(histeq(img(i:i+len-1,j:j+len-1)));%同样转化成int16类型

med_out(i:i+len-1,j:j+len-1,k) =med_out(i:i+len-1,j:j+len-1,k)+rect;%%rect和med_out转化成int16类型原因在于,你的med_out计算直方图均衡化并且把重复的像素的直方图均衡化结果进行累加,那么其累加的值很有可能超过255,所以你转化med_out为uint8型是不够的,它会把超过255的值强制为255。

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) = double(med_out(len:end-len,len:end-len,k));%%这里对图像两边各扩展了四个像素,所以起始位置应该是len,而不是len+1,同样结束就是end-len

med_out1(:,:,k) = med_out1(:,:,k)/counts(len:end-len,len:end-len);

out(:,:,k) = uint8(med_out1(:,:,k));%%转化成uint8型

end

figure,imshow(out),title('poshe result');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

这样改就可以了,运行后可以出结果,就不贴了!!

编程时要考虑数据范围是否过界的问题。

以上就是关于为什么POSHE均衡化算法程序出现的图像是黑色的全部的内容,包括:为什么POSHE均衡化算法程序出现的图像是黑色的、谁有部分子块重叠局部直方图均衡的程序,即poshe算法,谢谢,下面是poshe算法的步骤、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9679421.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存