将像素设置为特定值

时间:2013-02-21 20:37:29

标签: function matlab call

我在matlab中写了这个函数,它将成员x = y1的像素1的值设置如下:

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);

但是,问题是,基于上面的信息,将返回到我的调用脚本以及如何返回?

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

感谢。

1 个答案:

答案 0 :(得分:3)

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

其次,算法中存在错误:

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);