【问题标题】:Fetching brightest pixel from a grayscale image从灰度图像中获取最亮的像素
【发布时间】:2017-08-10 05:44:39
【问题描述】:

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

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

代码:

[m,n]=size(image);

num_pixels=m*n;

pixels=floor(num_pixels*0.01)

在这里,我的变量 pixels 中有 7000 个数字。我不知道如何对这 7000 个像素进行排序,因为它只是给我一个计数。我需要得到这个计数的所有像素值。

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

【问题讨论】:

  • 按照第一个猜测,为什么不按值对像素进行排序,取最高的 0.1% 像素?
  • 我的代码是这样的:[m,n]=size(image); num_pixels=m*n;pixels=floor(num_pixels*0.01);.在这里,我的可变像素中有一些 7000 数字。现在我不知道如何对这 7000 像素进行排序,因为它只是给我一个计数。我需要得到这个计数的所有像素值。如何获取所有像素值。
  • 如果您尝试过一些代码,请将其放在原始问题中。
  • 首先线性化您的矩阵image,然后对image 进行排序(降序)并仅取起始1 到pixels 值。这些将是具有最高亮度的 0.1% 像素。
  • 您只需要这些像素的值,还是还需要位置?

标签: arrays matlab image-processing


【解决方案1】:

您可以通过这种方式获得顶部强度值:

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

这种方式(如 cmets 中所述):

  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;
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-08
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2015-10-26
    相关资源
    最近更新 更多