我在matlab
中写了这个函数,它将成员x
= y
到1
的像素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
。那是为什么?
感谢。
答案 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);