2016-10-12 7 views

ответ

2

вопрос заключается в том, что ваши данные ввода изображения I имеет значения между 0 и 255 и имеет тип данных uint8. После свертки выход равен double и по-прежнему имеет значения между 0 и 255.

по умолчанию для imshow когда вход типа double заключается в масштабе цветовых осей таким образом, что 0 черный и белый 1. Ваше изображение отображается почти полностью как белый, так как большинство ваших значений - >1.

Чтобы исправить это (так как вам нужно пределы 0 в 255), вы можете указать диапазон значений для использования в качестве второго входа в imshow

imshow(C, [0 255]) 

Или вы можете просто представить пустой массив в качестве второй вход, так что цвет, которые автоматически масштабируется экстремумы входного изображения

imshow(C, []) 

в качестве побочного сведению, вы можете использовать conv2, а не convn, поскольку вы сим выполняющий двумерную свертку. conv2 требует, чтобы все входы были числами с плавающей запятой, поэтому сначала конвертируем M и I в double.

C = conv2(double(I), double(M), 'same'); 

В качестве альтернативы, вы можете использовать imfilter, если у вас есть изображение Processing Toolbox (как @rayryeng предложил) и не придется беспокоиться о литье M и I в double

C = imfilter(I, M); 
+0

Он работал, спасибо ! Но мне интересно, почему функция conv не использует тип данных uint8 вместо double? Или для этой цели существует специальная функция? – Burak

+0

@Burak 'conv2' принимает только данные типа double или' single'. Это указано в документации. Вот почему Suever передал данные «double». Если у вас есть панель инструментов обработки изображений, вы можете использовать 'imfilter', который принимает почти все типы входов. – rayryeng

+0

@rayryeng Я знаю, прочитайте меню справки для функции conv. Я спросил, почему? Есть ли какая-то особая причина? – Burak