2013-02-21 49 views
0

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的标准。

在继续之前,我没有看到图像中满足条件的像素被设置为1。是不是我的像素设置为1是否正确?

底线是,我假设core代表那些像素的成员程度等于1。而且,在算法我想实现的,我有以下行:

C1 = core(F) 

其中F代表图像。

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

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

但是,问题是,基于上述信息,究竟会回到我的调用脚本,以及如何?

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

谢谢。

回答

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