0

我编写了这个函数,它将具有隶属度=matlab的像素的值设置为如下:xy11

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)

whereF代表图像。

基于此,在matlab. 嗯,是的,在matlab这一行中可以简单地写成:

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

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

而且,是的,作为输出,我总是1进入ans. 这是为什么?

谢谢。

4

1 回答 1

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);
于 2013-02-21T20:56:44.033 回答