数据类型问题,histeq函数,当你的图像是double型时,返回值是0或者1;当你的图像是uint8型时,返回值为0-255。
所以你编的代码里的:k=histeq(m)%对块图进行直方图均衡,m为double型,所以其k就是全1,那么x2中对应的位置也就是全1,最后显示转化成uint8显示肯定为黑色。
所以把k=histeq(m)改成k=histeq(uint8(m))即可。运行结果如图
clearI = imread('E:\ebook\lena.bmp')
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,:) imgimg(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')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
这样改就可以了,运行后可以出结果,图片就不贴了!!
编程时要考虑数据范围是否过界的问题。
设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。
在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f)。
这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):
(1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。
(2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致性。
扩展资料:
直方图均衡化作用
这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。
这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。
这种方法的一个主要优势是它是一个相当直观的技术并且是可逆 *** 作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。
在统计学中,直方图(英语:Histogram)是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。直方图是品质管理七大工具之一。
把直方图上每个属性的计数除以所有属性的计数之和,就得到了归一化直方图。之所以叫“归一”,是因为归一化直方图的所有属性的计数之和为1,也就是说,每个属性对应计数都是0到1之间的一个数(百分比)。
参考资料来源:百度百科-直方图均衡化
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)