【问题标题】:Finding those pixels that meet a specific criterion查找满足特定标准的像素
【发布时间】:2013-02-05 11:01:16
【问题描述】:

附件是matlab自带的cameraman.tif的图片,但是在应用[fuzzy c-means]1之后

此外,算法的输出是u2(像素的隶属度)。有关此数据,请参阅 matlab.mat

我要做的是从所附图像中选择u2 值为equal to 1 的像素。

关于如何在matlab 中完成此操作的任何想法?

谢谢。

【问题讨论】:

    标签: matlab for-loop matrix pixel fuzzy-c-means


    【解决方案1】:

    获取相应像素的索引:

    ind = find( u2 == 1 ); % return indices of all pixels with u2 eq to 1
    

    自己获取像素

    pixels = img( ind );
    

    【讨论】:

    • 当我为u2 执行此操作时,我得到:ind = Empty matrix: 0-by-1 尽管有等于1 的值。这是为什么?谢谢
    • 这可能是由于数字问题。 find( abs(u2-1) < 1e-6 ) 怎么样?
    • 当我检查matlab.mat 时,当您查看单元格值时,它会显示1.0000。但是,当我双击单元格时,我惊奇地得到:0.999999999259113!这似乎是为什么我得到一个空矩阵作为返回值......
    • 您的解决方案给出了来自u2 的结果。但是,我想将其映射到原始图像中的像素。如何从u2 -- 1 的原始图像中获取像素?谢谢
    • @Med-SWEng u2 的形状 (size) 是什么?和图片一样吗?如果是这样 - 索引是相同的。您可以使用[rows cols] = find( abs(u2-1)<1e-6 ); 获取行/列位置
    【解决方案2】:

    或者,您可以避免使用 find 并直接进入 logical indexing

    给定一张图片:

    >> image = [1 3 5; 2 3 1; 3 2 2]
    
    image =
    
         1     3     5
         2     3     1
         3     2     2
    

    您可以使用条件 iamge == 2 找到值为 2 的像素:

    K>> image == 2
    
    ans =
    
         0     0     0
         1     0     0
         0     1     1
    

    例如,如果您想通过将这些像素设置为 7 来操作这些像素,则只需一行即可轻松完成:

    image(image == 2) = 7
    
    image =
    
         1     3     5
         7     3     1
         3     7     7
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      相关资源
      最近更新 更多