没有黑色像素的黑色像素数作为右邻居

时间:2017-10-10 10:26:17

标签: matlab

我试图找到右边,右上角,右下角没有黑色像素邻居的黑色像素数。

mask1 = [0|1 0|1 0; 0|1 0|1 0; 0|1 0|1 0];
black = double (x28462847_1_1 < 128);
result = conv2 (black, mask1, 'same');
count = sum (result(:) == 1)

我尝试使用这个面具。有谁知道我哪里出错了

2 个答案:

答案 0 :(得分:1)

我认为最好的方法是:

notblack=black>0; %if its not zero, then its not black

mask=[0 1 0; 1 0 1; 0 1 0]% or mask=[0 0 1; 0 0 1; 0 0 1]; in your case.

result = conv2(double(notblack),mask, 'same'); % sum all values


count=sum(result(:)==sum(mask(:)));

答案 1 :(得分:1)

要检测在其3个(上/下)右像素中没有黑色像素的所有黑色像素(1),您可以使用以下蒙版计算互相关:

mask = [0  0  -1; 
        0  1  -1; 
        0  0  -1];

对于所需的位置,结果将是1,对于其他位置,结果将更小。

result = conv2 (double(black), rot90(mask,2), 'same') == 1; % Note that I used `conv2` with `rot90` to calculate the cross correlation. 
count = sum (result(:)); % count the number of desired elements

示例

对于以下图片

rng('default')
black = rand(10) > 0.8;

我获得了以下结果:

figure
imshow(~black, 'InitialMagnification','fit')
hold on
[x, y] = find(result);
plot(y, x, '*') % highlight the found positions with an asterisk

enter image description here