[英]Manipulations within sliding window functions (for image denoising)
我正在對圖像進行降噪處理,試圖在矩陣中保持連續的行(有一定的寬容度),並刪除與我后面的行沒有真正聯系的隨機非零元素。 我的問題在下面詳述:
我嘗試編寫一個滑動窗口函數,該函數將搜索我的二維矩陣的r
行並查找非零數字。
對於每個非零數字,函數應在行r
和行r+1
(和r-1
)的2x2
鄰域(非零元素的任一側為2個數字)中查找非零元素的存在。 (如果存在)。
如果鄰居為空,則應將第r
行中的原始元素清零,否則應保留窗口中的所有非零元素。
為了使事情復雜化,我還嘗試使滑動窗口成為圓形,以便當它到達行的末尾時,它不會被壓縮,而是在鄰域中從行的開始處包含數字。
對於所有行,如果以某種方式連接到第1行,我也只能保留一個“ connected”元素,因此矩陣下方的連續行不能從第2行開始。
我已經在Matlab中使用for
-loops編寫了此代碼,並且在嘗試在窗口中操作值時遇到了問題。 除此之外,我的功能真的很慢。 有沒有一種方法可以在Matlab或Python for
執行,而無需使用-loops且沒有任何預安裝的工具箱?
Matlab代碼示例:“ test”是一個二進制矩陣(但並非我將要研究的所有矩陣都是二進制)。 它包含5行。 這是我為第1行編寫的虛擬代碼。窗口操作(代碼的第4行)不起作用,但希望這能使您對我要執行的操作有所了解。 這段代碼也省略了矩陣的邊緣,因為我不確定使這種圓形成為最佳方法。
n=2 % size of neighborhood to look at
p=size(test,2) % length of row
for ii=1+n:p-n;
if test(1,ii)==1;
if sum(test(2,(ii-2:ii+2))+test(1,(ii-2:ii+2)))>=2;
test(2,(ii-2:ii+2))=test(2,(ii-2:ii+2))*2;
else;
test(1,ii)=0;
end;
end;
end
var=test(2,:);
var(var==1)=0;
var(var>=2)=1;
test(2,:)=var;
Example matrix ("test"): (zeros replaced with '.' for better visualization)
. . . 1 . . 1 . . . . 1 1 1 . . . . . . .
1 . . . 1 . 1 . . . 1 . . . . . . . . 1 .
. . . . . 1 1 1 . . . 1 . . . . . . 1 . .
. . 1 . . . . . 1 . . . . . . . . . . 1 .
. . . . . . . . . 1 . . . . . 1 . . . . .
Desired output: (zeros replaced with '.' for better visualization)
. . . 1 . . 1 . . . . 1 1 1 . . . . . . .
. . . . 1 . 1 . . . 1 . . . . . . . . . .
. . . . . 1 1 1 . . . 1 . . . . . . . . .
. . . . . . . . 1 . . . . . . . . . . . .
. . . . . . . . . 1 . . . . . . . . . . .
謝謝你的幫助!
以下是執行我認為您要執行的操作的概述:
test
。
A(A > 0) = 1;
A
包含值> 1,因此將它們全部更改為1,僅保留零值。
A(A > 0) = 1;
test
與A
通過逐元素乘法相結合,僅保留那些在test
既非零又具有非零鄰居的元素。
nCols = size(test, 2);
paddedTest = [zeros(1,nCols);...
test(:, nCols-1:nCols), test, test(:,1:2);...
zeros(1,nCols)];
nCols = size(test, 2); paddedTest = [zeros(1,nCols);... test(:, nCols-1:nCols), test, test(:,1:2);... zeros(1,nCols)];
顯然,這可以通過執行自己的填充來更改正在處理的矩陣的大小,因此您需要更改卷積參數才能返回與test
大小相同的矩陣。
A = conv2(paddedTest, fil, 'valid');
我目前沒有可用的Matlab對此進行測試,但希望其他人可以糾正我犯的任何嚴重錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.