【问题标题】:Setting pixels to a specific value将像素设置为特定值
【发布时间】:2013-02-07 08:04:57
【问题描述】:

我在matlab 中编写了这个函数,它将具有y = 11 隶属度的像素x 的值设置如下:

function c = core(x, y)
        tolerance = 0.01;
        pixels = [];
        index = 1;
        for i=1:length(y)
            for j=1:length(y)
                if abs(y(i,j)-1) <= tolerance
                x(i,j) = 1;
                pixels(index) = x(i,j);
                end
            end
            end
            c = pixels;
       end

由于我是从脚本调用此函数,我如何返回那些设置为1 的像素?或者,这里的正确方法是返回原始图像,其中满足设置为1 的标准的像素。

Bur,在我继续之前,我没有看到图像中符合条件的像素被设置为1。我将像素设置为1 不正确吗?

底线是我假设core 代表那些隶属度等于1 的像素。而且,在我试图实现的算法中,我有以下行:

C1 = core(F)

F 代表图像。

基于此,在matlab 中写这个的正确方法是什么。嗯,是的,在matlab 这行可以简单地写成:

C.('C1') = core(x,y);

但是,问题是,根据上面的信息,我的调用脚本会返回什么以及如何返回?

而且,是的,作为输出,我总是在ans 中得到1。这是为什么呢?

谢谢。

【问题讨论】:

    标签: function matlab call


    【解决方案1】:

    首先,您在函数右侧传递的所有参数都被视为函数的本地参数,不会在外部更新。所以要获取更新的图像,请将其返回到左侧。

    其次你的算法有错误:

    1- for 循环不会扫描所有图像。

    2- index 变量永远不会更新。

    下面这个函数应该可以实现你想要的:

    function [x,pixels] = core(y)
        tolerance = 0.01;
        pixels = [];
        index = 1;
        for i=1:size(y,1)
            for j=1:size(y,2)
                index = j+i*size(y,2);
                if abs(y(i,j)-1) <= tolerance
                x(i,j) = 1;
                pixels = [pixels index];
                end
            end
        end
    end
    

    编辑:

    一种更简单的方法,无需循环:

    tolerance = 0.01;
    x = zeros(size(y));
    x((abs(y)-1) <= tolerance) = 1;
    pixels = find(x==1);
    

    【讨论】:

      猜你喜欢
      • 2014-01-16
      • 2012-02-25
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      相关资源
      最近更新 更多