【问题标题】:get the top 25% intensity value of image in matlab在matlab中获取图像的前25%强度值
【发布时间】:2014-11-07 20:04:53
【问题描述】:

我想创建一个阈值蒙版,等于图像强度值的前 25%。我使用了这段代码,但没有生成所需的值:

img1 = im2double(imread('image1.tif'));
threshold = (0.25);
img1(img1 < threshold) = 0;
img1(img1 > threshold) =1;

【问题讨论】:

  • 我试过了,可以!问题是什么?试试cameraman 然后imshow
  • 也看看这个答案是否有帮助:stackoverflow.com/questions/26617221/…
  • 这里提供的任何一种解决方案都对您有用吗?

标签: matlab image-processing


【解决方案1】:

试试prctile

img1 = im2double(imread('image1.tif'));
threshold = prctile(img1(:),75);
img1(img1 <  threshold) = 0;
img1(img1 >= threshold) = 1;

【讨论】:

  • 您的解决方案看起来合法,但我不知道为什么我没有得到想要的图像!我确信所需的图像是正确的,因为它来自 gonazelz 的图像处理书!
  • @jim 嗯......有趣的问题,你能提供图像和你的目标吗?只要你有足够的动力去解开这个谜团:)
  • 我认为 OP 可能正在寻找 cumsumed 版本,我不知道,这仍然是一个猜测工作,不知道他/她对 25% 强度的期望是什么! +1 提供了一种简短的方法来实现这一目标,直到 OP 澄清“正确”的方式。
【解决方案2】:

更新版本-

img1 = im2double(imread('coins.png')); %// input image

threshold = 0.25;
[simg1,sind] = sort(img1(:),'descend');
idx = find(cumsum(simg1(:)) >= sum(img1(:))*threshold ,1,'first');
mask = false(size(img1));
mask(sind(1:idx))= 1;

figure,imshow(img1)
figure,imshow(mask)

【讨论】:

  • 我想我被卡住了......你为什么不喜欢百分位版本?
  • @matheburg 没有错!只是坚持图像处理。工具箱,或者我想只是提供另一种解决它的方法! :) 用多种方法解决问题是有意义的,对吧? :)
  • @matheburg 你们都有很好的解决方案,很高兴有两种不同的方法。全方位+1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 2020-09-10
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2018-02-21
相关资源
最近更新 更多