Выходное значение преобразования расстояния `bwdist` полностью черное

Почему изображения bwdist и imhmin полностью черные? Когда я проверяю две матрицы в рабочей области, значения кажутся прекрасными. Вы можете запустить этот код в Matlab, чтобы проверить его. Ожидаемый результат — изображение в градациях серого, где центр каждого связанного компонента имеет низкую интенсивность, а края связанных компонентов имеют высокую интенсивность. Расстояние в пикселях от краев дальше от центра тяжести и будет иметь большое значение расстояния. Если значения расстояния считаются интенсивностью, то высокая интенсивность на краях.

Рассматривайте единицы как связанные компоненты, которые должны быть преобразованы на расстоянии, в то время как нули являются просто фоном. Я хотел бы иметь фон как 0.

image = zeros(5,5);
image(2,2) = 1;
image(4,4) = 1;

binary = im2bw(image,graythresh(image));
distance = bwdist(binary,'cityblock');
hminima = imhmin(distance,5);

figure; imshow(binary)
figure; imshow(distace)
figure; imshow(hminima)

Нужный результат примерно такой.

введите здесь описание изображения


person Senyokbalgul    schedule 31.08.2016    source источник
comment
Почему distance отрицательно?   -  person beaker    schedule 31.08.2016
comment
@beaker Я отредактировал вопрос. Изображение с преобразованием расстояния после bwdist(~binary,'cityblock') почему-то выглядит точно так же, как и бинарное.   -  person Senyokbalgul    schedule 31.08.2016
comment
Потому что это вычисленное расстояние. Было бы полезно, если бы вы описали, чего вы пытаетесь достичь, и результаты, которые вы ожидаете получить.   -  person beaker    schedule 31.08.2016
comment
@beaker Ожидаемый результат — изображение в градациях серого, где центр каждого соединенного компонента имеет низкую интенсивность, а края соединенных компонентов имеют высокую интенсивность. Расстояние в пикселях от краев дальше от центра тяжести и будет иметь большое значение расстояния. Если значения расстояния считаются интенсивностью, то высокая интенсивность на краях.   -  person Senyokbalgul    schedule 31.08.2016
comment
bwdist для любого пикселя, который равен 0 / черный, вычисляет расстояние до ближайшего ненулевого пикселя. Сначала вы инвертируете изображение, так что это означает, что в изображении есть только два нулевых пикселя. Ближайшие ненулевые пиксели к любому из них на самом деле равны 1, и, поскольку другие пиксели не равны нулю, они просто устанавливаются равными 0 в соответствии с определением bwdist. Вот почему вы получаете переменную distance такой же, как оригинал. Непонятно, почему вы сначала инвертируете изображение.   -  person rayryeng    schedule 31.08.2016
comment
Уточнение следует отредактировать в исходном вопросе. Комментарии не являются постоянными. Что вы считаете своими связанными компонентами, отдельными пикселями, которые вы добавили к пустому изображению, или true пикселями инвертированного изображения?   -  person beaker    schedule 31.08.2016
comment
И какие значения должны быть между связанными компонентами?   -  person beaker    schedule 31.08.2016
comment
@beaker Я отредактировал вопрос и уточнил нужный результат.   -  person Senyokbalgul    schedule 31.08.2016
comment
@rayryeng Изображение было перевернуто, так как я хотел, чтобы фон был черным, а не белым.   -  person Senyokbalgul    schedule 31.08.2016
comment
Это не имеет смысла для преобразования расстояния. Вы не знаете, как работает bwdist, если вы предоставляете этот ввод.   -  person rayryeng    schedule 31.08.2016
comment
У вас есть изображение 5x5, которое вы построили. Пожалуйста, покажите нам distance изображение, которое вы хотите из этого. То, что вы пытаетесь сделать, звучит достаточно просто, но вы сделали противоречивые заявления, которые сбивают с толку. Например, исходное изображение полностью черное с двумя белыми пикселями. Затем вы говорите, что инвертируете изображение, чтобы фон был черным, а не белым. Как фон белый в вашем построенном изображении?   -  person beaker    schedule 31.08.2016
comment
В любом случае, я должен уйти ненадолго. Я подозреваю, что вы хотите сделать что-то вроде max(distance(:)) - distance (может быть, +1), а не отрицать. Но тогда вам нужно будет правильно масштабировать его и отфильтровать фоновые пиксели.   -  person beaker    schedule 31.08.2016
comment
@beaker Я привел пример того, что нужно. Я думаю, что это должно быть проще объяснить, что нужно.   -  person Senyokbalgul    schedule 31.08.2016
comment
@rayryeng Я привел пример того, что нужно. Я думаю, что это должно быть проще объяснить, что нужно.   -  person Senyokbalgul    schedule 31.08.2016


Ответы (1)


Я не знаю, понимаю ли я вопрос или нет, но из самого последнего редактирования кажется, что вам нужна эта строка

figure; imshow(distace)

чтобы выглядеть как изображение, которое вы разместили. Для этого вы должны понимать, что imshow создает изображение в градациях серого, сопоставляя 0 с черным и 1 с белым. В вашем примере distance варьируется от 0 до 5. Если вы используете следующий код

scaledDistance = distance/max(distance(:));
figure; imshow(scaledDistance)

Вы получите изображение в градациях серого вместо двух точек. Если вы используете этот код:

scaledDistance = distance/max(distance(:));
figure; imshow(1 - scaledDistance)

Оно будет перевернуто, чтобы быть похожим на изображение, которое вы разместили.

person Trogdor    schedule 31.08.2016
comment
Да! Это то, что было нужно. Спасибо. - person Senyokbalgul; 31.08.2016