我有一個圖像,我必須滑動81 * 81窗口,以找到中心像素和每個像素之間的強度距離(差異)在81 * 81窗口周圍,我還必須找出位置距離,即中心像素座標和周圍窗口中像素座標之間的差異。如果我使用for循環,那麼我將不得不使用4個嵌套for循環進行此操作,對於單個圖像幾乎需要一整天的時間。我想爲圖像中存在的每個像素存儲81 * 81的亮度差異,同樣對於位置距離也是如此,這往往會產生4D變量。任何人都可以建議我採取一些有效的方法。這裏是我寫這段代碼的方式:如何加快matlab中的滑動窗口函數的圖像
I = imread('House.tiff');
YCbCr = rgb2ycbcr(I);
YCbCr = double(YCbCr);
YCbCr = imresize(YCbCr,[200 200]);
[m n v] = size(YCbCr);
Y = YCbCr(:,:,1); Cb = YCbCr(:,:,2); Cr =YCbCr(:,:,3);
Y1 = padarray(Y,[20,20]);
Cb1 = padarray(Cb,[20,20]);
Cr1 = padarray(Cr,[20,20]);
window_size = 41;
p = (window_size-1)/2;
Dl = zeros(m,n,41,41); Df = zeros(m,n,41,41);
for x = 1:1:m
for y = 1:1:n
for a = -p:1:p
for b = -p:1:p
Df(x,y,a+p+1,b+p+1)= abs(Y(x,y)-Y1(x+a+p,y+b+p))+ abs(Cb(x,y)- Cb1(x+a+p,y+b+p))+ abs(Cr(x,y)- Cr1(x+a+p,y+b+p));%% intensity distance
Dl(x,y,a+p+1,b+p+1) = max(abs((x+p)-(x+a+p)),abs((y+p)-(y+b+p)));%% location distance
end
end
end
end
感謝您的建議......您的提示非常有幫助......您能否建議我以某種方式存儲每個像素的所有81 * 81值。因爲每次窗口滑動時都會顯示不同的值。 ..再次感謝... –
非常感謝@ 16per9這實際上工作很好..... –
@GauriDeshpande如果我的回答幫助你,請不要忘記標記爲正確:)謝謝,祝你好運 – 16per9