2013-02-21 91 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);