为了提高编程能力,决定对日常遇到的一些编程问题做一个积累,以供今后查阅
在数字图像处理实践实验一中,要求复现何凯明的暗通道去雾算法,其中计算大气亮度这一步骤中。
要求:
记录暗通道图中灰度最大的前 0.1%的像素所在位置,把带雾图像在这些位置中分别求出三个通道最大的灰度值作为大气亮度。
首先,找到前0.1%大的灰度值像素所在位置。
num=floor(0.001*m*n); %计算前0.1%的个数 MaxPos = [0,0]; % 初始化位置 for i=1:num MaxValue = max(max(dark_img)); [x,y] = find(dark_img==MaxValue); dark_img(dark_img==MaxValue) = 0; %最大值置零,寻找下一次次大值 %检查长度 MaxPos = vertcat(MaxPos,[x,y]); Cnt = length(MaxPos(1)); if Cnt > num break; end end MaxPosN = MaxPos(2:num+1,:);%删掉初始点[0,0]
找到位置中对应的三个通道灰度值
%找到三个维度的亮度最大值 Ar=0;Ag=0;Ab=0; for i=1:num if img_r(MaxPosN(i,1),MaxPosN(i,2))>Ar Ar=img_r(MaxPosN(i,1),MaxPosN(i,2)) end if img_g(MaxPosN(i,1),MaxPosN(i,2))>Ag Ag=img_r(MaxPosN(i,1),MaxPosN(i,2)) end if img_b(MaxPosN(i,1),MaxPosN(i,2))>Ab Ab=img_b(MaxPosN(i,1),MaxPosN(i,2)) end end A=[Ar,Ag,Ab] end