1 回答

TA贡献2039条经验 获得超7个赞
以下是执行我认为您要执行的操作的概述:
步骤1:
通过求和邻居的值,找出在其3x5邻域中具有非零元素的所有矩阵位置。我们现在还不希望包含当前元素,因此中间不包含零。输入矩阵为test。
fil = [1 1 1 1 1; 1 1 0 1 1; 1 1 1 1 1];
A = conv2(test, fil, 'same');
第2步:
A 现在包含的值大于1,因此将它们全部更改为1,仅保留零值。
A(A > 0) = 1;
第三步:
现在,您已经确定了所有具有有效邻域的元素,test并A通过逐元素相乘相结合,仅保留在其中既非零test 又具有非零邻居的那些元素。
result = test .* A;
步骤0:
填充-上面的命令应该可以正常工作,但是用零填充行和列。据我了解,您的填充要求是您希望圆行和列用零填充。
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对此进行测试,但希望其他人可以纠正我犯的任何严重错误
添加回答
举报