Arrays 从灰度图像中提取最亮像素

Arrays 从灰度图像中提取最亮像素,arrays,matlab,image-processing,Arrays,Matlab,Image Processing,我有一个灰度图像,我需要从中找到顶部0.1%的最亮像素 我尝试在0.1%的像素上使用max函数,但它没有给出正确的结果 代码: [m,n]=size(image); num_pixels=m*n; pixels=floor(num_pixels*0.01) 在这里,我在变量pixels中得到了大约7000个数字。我不知道如何排序这7000像素,因为它只是给我一个计数。我需要得到这个计数的所有像素值 任何人都可以建议如何在MATLAB中执行此操作。您可以通过以下方式获得最高强度值: so

我有一个灰度图像,我需要从中找到顶部0.1%的最亮像素

我尝试在0.1%的像素上使用max函数,但它没有给出正确的结果

代码:

[m,n]=size(image);

num_pixels=m*n;

pixels=floor(num_pixels*0.01)
在这里,我在变量
pixels
中得到了大约7000个数字。我不知道如何排序这7000像素,因为它只是给我一个计数。我需要得到这个计数的所有像素值


任何人都可以建议如何在MATLAB中执行此操作。

您可以通过以下方式获得最高强度值:

  sortedIntensityValues = sort(grayScaleImg(:));  % ascending order
  numPixels = numel(sortedIntensityValues);
  topIntensity = sortedIntensityValues(floor(numPixels*0.999));
这样做(如评论中所述):

或者,如果您有stats工具箱,您可以使用
prtcile
函数执行以下操作:

  topIntensity = prctile(grayScaleImg(:),99.9); 
下面是使用第三种方法的概念证明:

  • 创建一些代码供您测试:

    grayScaleImg = rand(4096,4096);
    
  • 获取仅0.1%的像素亮度大于的强度

    topIntensity = prctile(grayScaleImg(:),99.9); 
    
  • 找到强度大于此值(即顶部0.1%)的像素,并放置在逻辑索引数组中以供参考

    logicalIndices = grayScaleImg>topIntensity;
    

  • 根据第一个猜测,为什么不按值对像素排序并取最高的0.1%像素?我的代码如下:[m,n]=大小(图像);num_像素=m*n;像素=地板(num_像素*0.01);。在这里,我的可变像素中有大约7000个数字。现在我不知道如何排序这7000像素,因为它只是给我一个计数。我需要得到这个计数的所有像素值。如何获取所有像素值。如果您有一些您尝试过的代码,请将其放在原始问题中。首先线性化您的矩阵
    图像
    ,然后排序(降序)
    图像
    ,只取开始的1到
    像素
    值。这些将是具有最高亮度的0.1%像素。您只需要这些像素的值,还是还需要位置?
    logicalIndices = grayScaleImg>topIntensity;