2015-02-04 3 views
0

Я использовал следующий код, чтобы получить границу изображения, а также удалить тень под изображением. Изображение - изображение в оттенках серого. Код:Удалить тень под изображением

x = imread('image.jpg'); 
sobel_h = [-1 0 1;-2 0 2;-1 0 1]; 
sobel_v = [-1 0 1;-2 0 2;-1 0 1]'; 
x_sobel_h = conv2(x,sobel_h,'same'); 
x_sobel_v = conv2(x,sobel_v,'same'); 
x_sobel_c = sqrt((x_sobel_h).^2+(x_sobel_v).^2); 
x_sobel_c=uint8(x_sobel_c); 
figure,imshow(x_sobel_c); 
z=x_sobel_c; 
z(z~=0 & z<=150)=0; 
z(z>0)=255; 
figure,imshow(z); 

Я нашел этот код на Matlab Файл Exchange.It прост и хорошо работает с некоторыми изображениями, но остается тень на некоторых изображениях.

Тень может быть удалена, если я изменю z<=150 на более высокое значение. Но в зависимости от изображения это значение нужно изменить. Кто-нибудь знает какой-либо другой метод порогового значения для удаления тени в разных изображениях? Если кто-нибудь может указать мне на какой-либо справочный материал, я был бы благодарен. Спасибо

+0

** ** использовать ** постоянный порог, который будет работать для всех изображений. –

+0

Тогда вы можете предложить любой другой метод, который я могу использовать для получения лучших результатов? – Matte

+0

Вам нужно сделать свой код для своего дела. Первое правило обработки изображений: ** IMPOSIBLE **, что любой алгоритм будет корректно работать на всех изображениях. –

ответ

1

Как уже упоминалось в комментариях, для удаления теней не будет волшебной пули.

Ближе всего вы, вероятно, сможете использовать динамический метод для определения оптимального порога для каждого изображения. Например, метод Otsu реализован в MATLAB с помощью команд graythresh и multithresh (первый определяет один порог для разделения изображения на 2 класса, последний позволяет указать количество пороговых значений).

+0

Спасибо. Я использовал эти функции во время кодирования, но я не придавал им большого значения, так как не знал, пользуюсь ли я правильными функциями. Но сейчас я сосредоточусь на них больше и изменить мой код. Я также рассмотрел вопрос в этой ссылке, который реализует метод Otsu, и это очень полезно: http://stackoverflow.com/questions/20331347/how-to-remove-shadow-of-image- на MATLAB – Matte

Смежные вопросы