Обычно вы можете использовать atan2
для создания углов, которые находятся между -180 и 180 данными вашим горизонтальным и вертикальными компонентами градиента, и, следовательно, подписало углов. Однако, если вы хотите, чтобы углы от 0 до 360 или без знака углов, все, что вам нужно сделать, это поиск любых углов, которые генерируются atan2
, которые являются отрицательными, и добавляют 360 к каждому углу. Это позволит вам получить угол между [0,360)
. Например, угол -5 градусов на самом деле составляет 355 градусов без знака. Поэтому:
angles = atan2(grad_y, grad_x); %// Signed
angles(angles < 0) = 2*pi + angles(angles < 0); %// Unsigned
Здесь atan2
находится в радианах, поэтому мы добавим 2*pi
вместо 360 градусов. Если вы хотите градусов вместо радианах, используйте эквивалентные градусов по телефонам: atan2d
и поэтому:
angles = atan2d(grad_y, grad_x); %// Signed
angles(angles < 0) = 360 + angles(angles < 0); %// Unsigned
Идущий с вашими комментариями, вы также хотели бы сделать наоборот. В принципе, если нам задан неподписанный угол, как мы пойдем под знаком угла? Просто делайте наоборот. Найдите все углы > 180
, затем возьмите этот угол и вычтите на 360. Например, угол 182 без знака равен -178, или 182 - 360 = -178.
Поэтому:
Радианы
angles(angles > pi) = angles(angles > pi) - (2*pi);
Градусы
angles(angles > 180) = angles(angles > 180) - 360;
Вы также можете использовать 'функцию extractHOGFeatures' в компьютерном зрении инструментов системы. – Dima