2015-08-28 2 views
0

ввода Изображениеизображение не может быть отображено с помощью imshow

Input

я пытался применить Гильберт преобразование изображений. Моя цель - обнаружить края изображения. Я не могу отобразить изображение. Мой код выглядит следующим образом:

clear; close all; 
I = imread('sub.png'); 
ty = rgb2gray(I); 
figure; imshow(ty) 
ty= double(ty); 
ty = adapthisteq(ty); 
filtSize = 10; 
H1 = fspecial('gaussian',[filtSize,filtSize],2); 
H2 = fspecial('gaussian',[filtSize,filtSize],2); 
H = H2-H1; 
Hedge = imag(hilbert(H)); 
Iodd = sqrt(imfilter(ty,Hedge).^2 + imfilter(ty,Hedge.').^2); 
figure; imshow(Iodd) 
G = log(Iodd); 
G = max(G(:)) - G; 
figure, 
imshow(G), colorbar 

выход: output

2) Есть ли разница между результатом градиента изображения и преобразование Гильберта?

+0

контроль ваш край обнаружения алгоритм, кажется, 'Iodd' всегда равен 0. – Gnimuc

+0

нет .И не не думаю so.can вы исправить это –

+0

@abcd Да,«Iodd»всегда находится 0. –

ответ

0

Это не имеет ничего общего с выходом.

В вашем коде Iodd есть все нулевые значения. это означает, что log(Iodd) не определено, таким образом NaN. G всего лишь NaN.

И это, к сожалению, потому что у вас мало идеи о том, что вы делаете!

Прежде всего, adapthisteq требуется двойное изображение, но ЖДИТЕ! данные whos изображения имеют тип double и двойное изображение не совсем то же самое. Двойное изображение - это изображение от 0-1, а данные, данные которых являются двойными, - это всего лишь вещь памяти. Вы хотите 0-1. Поэтому вы не хотите ty= double(ty);, вы хотите ty= im2double(ty);. Проверьте разницу между ними, добавив imshow(ty) сразу после adapthisteq.

А затем ваша следующая часть кода. Вы делаете некоторые причудливые вещи! hilbert, imag, ядра, ... хороший. К сожалению, опять же, вы делаете большую ошибку!

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

H1 = fspecial('gaussian',[filtSize,filtSize],2); 
H2 = fspecial('gaussian',[filtSize,filtSize],2); 
H = H2-H1; 

Если вы посмотрите внимательно, вы поймете, что совсем скоро вы создаете 2 одинаковых ядер и их вычитанием. Угадайте, что H имеет значение.

Вы фильтруете изображение с ядром, которое является всеми нулями. А потом взять логарифм !!!!

+0

извините, это была ошибка.и исправила его –

+0

@abcd не меняет вопрос Теперь. Оставьте это так, как было раньше, и откройте новый –

0

Вы видите черное изображение, потому что все значения в нем очень близки к 0 или, возможно, даже отрицательные. Чтобы что-то увидеть, вам нужно изменить масштаб значений.

Основываясь на ошибках, которые вы получаете, на вашем изображении должны быть NaNs. Попробуйте сделать G(isnan(G)) = 0; перед его отображением.

Что такое min(G(:))? Что такое max(G(:))? Что вы ожидаете от диапазона?

+0

Ошибка при использовании imageDisplayValidateParams Ожидаемый ввод № 2, [LOW HIGH], чтобы быть не NaN. Ошибка в images.internal.checkDisplayRange (строка 10) validateattributes (display_range, {'numeric'}, ... Ошибка в images.internal.imageDisplayValidateParams (строка 55) common_args.DisplayRange = images.internal.checkDisplayRange (common_args.DisplayRange, mfilename); Ошибка в images.internal.imageDisplayParseInputs (строка 78) common_args = images.internal.imageDisplayValidateParams (common_args); Ошибка в imshow (строка 223) [common_args, specific_args] = ... Ошибка в тесте (строка 17) imshow (G, []) –

+0

Похоже старой версии MATLAB. Попробуйте 'imshow (G, [min (G (:)), max (G (:))]);' – Dima

+0

Ошибка использования imageDisplayValidateParams Ожидаемый входной номер 2, [LOW HIGH], чтобы быть не NaN.Error в магах. internal.checkDisplayRange (строка 10) validateattributes (display_range, { 'числовой'}, Ошибка в images.internal.imageDisplayValidateParams (строка 55) common_args.DisplayRange = images.internal.checkDisplayRange (common_args.DisplayRange, mfilename); ошибок в images.internal.imageDisplayParseInputs (строка 78) common_args = images.internal.imageDisplayValidateParams (common_args); ошибка в imshow (строка 223) [common_args, specific_args] = ... Ошибка в тесте (строка 17) (imshow G, [min (G (:)), max (G (:))]); –

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