Java教程

【算法积累】找到前0.1%最大值的位置/MATLAB

本文主要是介绍【算法积累】找到前0.1%最大值的位置/MATLAB,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 前言
  • 1. Problem
  • 2. Solution


前言

为了提高编程能力,决定对日常遇到的一些编程问题做一个积累,以供今后查阅


1. Problem

在数字图像处理实践实验一中,要求复现何凯明的暗通道去雾算法,其中计算大气亮度这一步骤中。
要求:
记录暗通道图中灰度最大的前 0.1%的像素所在位置,把带雾图像在这些位置中分别求出三个通道最大的灰度值作为大气亮度。

2. Solution

首先,找到前0.1%大的灰度值像素所在位置。

  1. 初始化位置储存变量Maxpos。
  2. 找到最大值和最大值所在位置
  3. 将位置插入Maxpos,最大值置0
  4. 返回步骤2,像素个数达到要求后跳出循环。
  5. 删掉初始点。
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

这篇关于【算法积累】找到前0.1%最大值的位置/MATLAB的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!