簡體   English   中英

Matlab過濾器功能實現

[英]Matlab imfilter function implemenation

我正在嘗試編寫一個實現imfilter函數的函數。 但出現此錯誤。

??? 下標索引必須是實數正整數或邏輯

這一點

s = size(img);

在下面的代碼段中查找

s = size(img);
Ix = zeros(s);
Iy = zeros(s);
for i = 1:s
    for j = 1:s
        temp = img(i-1:i+1,j-1:j+1) .* Gx;
        Ix(i,j) = sum(temp(:));
    end
end

請問我做錯了什么嗎?

編輯代碼

s = size(img);
Ix = zeros(s);
Iy = zeros(s);
for i = 2:s(1)-1
    for j = 2:s(2)-1
        temp = img(i-1:i+1,j-1:j+1) .* Gx;
        Ix(i,j) = sum(temp(:));
    end
end

如果確實發生在調用s= size(img);的時刻s= size(img); ,那么您的工作空間中可能有一個可變的size ,這正遮蓋了size函數。

此外,您的循環還有幾個可能的問題。 首先,您不能在MATLAB的索引中使用零。 因此,當您在循環開始時將i = 1, j = 1時,您會期望temp行返回下標索引錯誤。

size的輸出(假設img是灰度圖像)將是兩個數字。 i = 1:s ,它將忽略第二個。 只要您的圖像是方形的,這很好,但是如果圖像不是方形,則不會執行您期望的操作。

最后,看看conv2的情況,而不是創建循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM