참가 대회/DroneLeft(~21년7월)

드론 3차 워크샵

천숭이 2021. 6. 2. 11:28

회전 

turn(droneObj, deg2rad(45) );


# 드론 카메라 이미지 받아오기

% 카메라 오브젝트 생성
droneObj = ryze()
cameraObj = camera(droneObj);

% 카메라 오브젝트 구체화
droneObj = ryze()
cameraObj = camera(droneObj, 'FPV');

preview - 동영상 실시간으로 보기 가능

closepreview -  동영상 닫기

frame = snapshot(cameraObj) - 프레임받기

[frame, ts] = snapshot(cameraObj) - 드론 카메라에서 이미지 프레임 받아오기

imshow(frame)

 

# 드론 카메라에서 실시간 영상 받아오기

donreObj = ryze()
drone_cam = camera(droneObj);

preview(drone_cam)

takeoff(droneObj);
pause(3);

moveup(droneObj, 2);
pause(3);

land(droneObj);

closePreview(drone_cam);

# 드론카메라에서 이미지 프레임 받아오기 : snapshot()

donreObj = ryze()
drone_cam = camera(droneObj);

takeoff(droneObj);
pause(3);
[frame, ts] = snapshot(drone_cam); % 드론카메라가 보고있는 화면 캡처

for i = 1:2  % 90도 회전시키고 카메라 캡처 두번 반복
	pause(1);
    disp(ts);
    imshow(frame);
    pause(1);
    turn(droneObj, deg2rad(90));
    pause(3);
    [frame, ts] = snapshot(drone_cam);
end

paise(1);
disp(ts);
imshow(frame);
puase(1);
land(droneObj);

 


<이미지 처리, 자르기, 색상공간변형, 엣지검출 > 

img = imread('Image.png') % 작업공간에 img가 등록되고, 이미지의 크기도 알 수있음
imshow(img); % 이미지 확인
imwrite(img, 'write_image.png') % 이미지 저장

flipud(img) - 상하반전

fliplr(img) - 좌우반전

imrotate(이미지, 회전각도, 보간법, 출력이미지)

ex ) imrotate(img, 90, 'nearest', 'crop'); 마지막 변수 디폴트값 'loose'

 

imcrop(img, [150 150 200 200]); - 이미지 자르기, 매개변수는 자르려는 위치

 

# 색상 공간 변형하기

H~179색조 S~255채도 V~255명도

hsv_img = rgb2hsv(img);  % 색상공간을 hsv로 변경

h,s,v 순서대로 출력하려면 hsv_img(:, :, N); % N을 1,2,3으로 순서대로 출력

 

 

 

 

 

 

 

 

 

# 엣지 검출하기

canny_image = edge(gray_image, 'Canny'); % 엣지 검출 전 이미지를 그레이스케일로 변경해야함


# 이미지 색 검출하기 - 임계값 처리

- 3가지 색의 임계값을 찾아 이진화 해보기

% 드론 객체와 카메라 객체 선언
drone = ryze();
cam = camera(drone);

% 임계값 초기값 설정
th_down=0.5;
th_up=0.6;

while 1
	% 드론의 카메라 이미지를 받아와 원본 이미지 확인
	frame=snapshot(cam);
    subplot(2,1,1), subimage(frame);  --> Image Processing Toolbox애드온 설치
    pause(1);
    % 이미지 hsv로 변환
    hsv = rgb2hsv(frame);
    h=hsv(:,:,1);
    % 현재 저장된 임계값을 이용해 이미지 이진화하고 이미지 확인
    if(th_up-th_down)<0
    	binary_res = (th_down<h)+(h<th_up);
    else
    	binary_res = (th_down<h)&(h<tp_up);
    end
    subplot(2,1,2), subimage(binary_res);
    disp("th_down: "+th_down+"   th_up: "+th_up);
    
    % 키보드 입력을 통한 임계값 조절
    x=input("(quit: q, up:e,  down:d) \ninput: ", 's'); disp(newline);
    if x=='q'
    	disp("* final th_down:" + th_down +"  final th_up  "+th_up);
        break
    elseif x=='e'
    	th_down=th_down+0.025;
        th_up=th_up+0.025;
    elseif x=='d'
    	th_down=th_down-0.025;
        th_up=th_up-0.025;
    end
    
    if th_down >1
    	th_down=th_down-1;
    elseif th_down<0
    	th_down=th_down+1;
    end
    
    if th_up>1
    	th_up=th_up-1;
    elseif th_up>0
    	th_up=th_up+1;
    end
end