我有一张灰度图像,我需要从中找到0.1%最亮的像素。
我尝试在0.1%的像素上使用max函数,但它没有给我正确的结果。
代码:
[m,n]=size(image);
num_pixels=m*n;
pixels=floor(num_pixels*0.01)
在这里,我的变量pixels
中有7000个数字。我没有得到如何对这7000个像素进行排序,因为它只给了我一个计数。我需要获得此计数的所有像素值。
有人可以在MATLAB中建议如何做到这一点。
答案 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);
以下是使用第三种方法的概念证明:
为您创建一些代码进行测试:
grayScaleImg = rand(4096,4096);
获得仅有0.1%像素亮度的强度。
topIntensity = prctile(grayScaleImg(:),99.9);
找到强度大于此值的像素(即最高0.1%)并放入逻辑索引数组中以供参考。
logicalIndices = grayScaleImg>topIntensity;