从灰度图像中获取最亮的像素

时间:2017-08-10 05:44:39

标签: 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中建议如何做到这一点。

1 个答案:

答案 0 :(得分:0)

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

  sortedIntensityValues = sort(grayScaleImg(:));  % ascending order
  numPixels = numel(sortedIntensityValues);
  topIntensity = sortedIntensityValues(floor(numPixels*0.999));

这种方式(如评论中所述):

  sortedIntensityValues = sort(grayScaleImg(:),'descend');  % descending order
  numPixels = numel(sortedIntensityValues);
  topIntensity = sortedIntensityValues(floor(numPixels*0.001));

或者,如果您拥有统计工具箱,则可以使用prtcile功能执行此操作:

  topIntensity = prctile(grayScaleImg(:),99.9); 

以下是使用第三种方法的概念证明:

  1. 为您创建一些代码进行测试:

    grayScaleImg = rand(4096,4096);
    
  2. 获得仅有0.1%像素亮度的强度。

    topIntensity = prctile(grayScaleImg(:),99.9); 
    
  3. 找到强度大于此值的像素(即最高0.1%)并放入逻辑索引数组中以供参考。

    logicalIndices = grayScaleImg>topIntensity;