设置的像素为特定值
问题描述:
我matlab
写了这个功能,设置有资格度y
= 1
来1
如下像素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
的标准。
在继续之前,我没有看到图像中满足条件的像素被设置为1
。是不是我的像素设置为1
是否正确?
底线是,我假设core
代表那些像素的成员程度等于1
。而且,在算法我想实现的,我有以下行:
C1 = core(F)
其中F
代表图像。
基于此,在matlab
中写下这个的正确方法是什么。嗯,是的,在matlab
这条线可以简单地写为:
C.('C1') = core(x,y);
但是,问题是,基于上述信息,究竟会回到我的调用脚本,以及如何?
而且,是的,作为输出,我总是得到1
在ans
。这是为什么?
谢谢。
答
首先,您在函数右侧传递的所有参数都被视为函数的本地参数,并且不会在外部更新。因此,要获取更新的图像,请将其返回到左侧。
二中有你的算法错误:
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);