最近研究图像去雾算法,作为菜鸟,慢慢学习。
算法原理参考以下两个链接:
http://www.cnblogs.com/Imageshop/archive/2013/04/07/3006334.html
http://blog.csdn.net/u010839382/article/details/49584181
我采用图像分块计算映射函数再插值增强的方法,可以把算法实现分为以下几个步骤:
(1)输入原图进行图像分块
(2)计算子图像块的CDF,映射函数
(3)逐像素根据插值原则,进行插值运算
(4)输出处理结果图
选取的测试图像(长551/宽375)
第一步:图像分块
参考帖子:http://www.matlabsky.com/thread-11379-1-1.html
该贴固定图像块大小为64*64个像素
下面修改的程序(MATLAB)可以设置图像块的数目为num*num,下边和右边不能被8整除的,则根据剩余大小存储。
<pre name="code" class="java">%局部直方图均衡化
num = 8;
%将图像分成num*num块
h = ceil(height/num); w = ceil(width/num);
%子图像块起始行列号向量
t1 = (0:num-1)*h + 1; t2 = (1:num)*h;
t3 = (0:num-1)*w + 1; t4 = (1:num)*w;
figure;
k = 0;
for i = 1 : num
for j = 1 : num
if(i<num && j<num)
temp = I(t1(i):t2(i), t3(j):t4(j),:);
else
if i == num && j~=num
temp = I(t1(i):height, t3(j):t4(j),:);
end
if j == num && i~=num
temp = I(t1(i):t2(i), t3(j):width,:);
end
if i == num && j==num
temp = I(t1(i):height, t3(j):width,:);
end
end
k = k + 1;
subplot(num, num, k);
imshow(temp);
end
end
分块效果如下:
num=2
num=8