
problemas con un programilla de procesado de imagen
Publicado por Miquel (1 intervención) el 09/01/2014 19:31:46
hola cracks,
soy muy nuevo en esto de programar en matlab y realizando un pequeño ejercicio me encuentro en un punto en el que no se como avanzar.
os explico, me pasan 4 imagenes de diferentes carreteras y me piden que, mediante una deteccion de bordes, pinte las linias blancas que delimitan la carretera, asi como las linias discontinuas, con sendas linias rojas y que ademas pinte una 4ta linia verde en el centro del carril derecho.
yo he conseguido realizar la deteccion de bordes y la posterior dilatacion para resaltar los bordes, pero a partir de ahi no se como seguir, pues he intentado crear una matriz de tres capas y extraer la capa roja para multiplicar-la con la imagen erosionada y posteriormente multiplicar esta ultima con la original capa a capa pero no consigo resultados satisfactorios.
agradeceria vuestra ayuda.
adjunto codigo e imagenes.
function [current_line, img_out] = pdi_T3_ex_3(image_filname)
%cargamos la imagen
road = imread(image_filname);
%calculemos el tamanyo de la imagen
mides = size(road);
mida_y = mides(1);
mida_x = mides(2);
% disp(mides);
%pasamos la imagen a blanco y negro
road_bw = im2bw(road,0.85);
%realitzemos la deteccion de bordes
road_bw_edge = edge(road_bw, 'sobel', [],'vertical');
%creamos un elemento estructural
SE = strel('square', 16);
%aplicamos una dilatacion
road_dilate = imdilate(road_bw_edge, SE);
%realitzemos un crop
road_crop = imcrop(road_dilate, [0 mida_y/3 mida_x mida_y]);
% s = size(road_crop);
% disp(s);
% imshow(road_crop)
%declaremos una imagen en color y del mismo tamaño que la imagen original
matRGB = uint8(ones(mida_y, mida_x, 3));
R = matRGB(:,:,1);
G = matRGB(:,:,2);
B = matRGB(:,:,3);
RGB(:,:,1) = R;
RGB(:,:,2) = G;
% figure
% subplot(211)
% imshow(R)
% subplot(212)
% imshow(G)
% sizeRGB = size(matRGB);
% sizeR = size(R);
% sizeG = size(G);
% disp(sizeRGB);
% disp(sizeR);
% disp(sizeG);
figure
subplot(321)
imshow(road)
subplot(322)
imshow(road_bw)
subplot(323)
imshow(road_bw_edge)
subplot(324)
imshow(road_dilate)
subplot(325)
imshow(road_crop)




muchas gracias!
soy muy nuevo en esto de programar en matlab y realizando un pequeño ejercicio me encuentro en un punto en el que no se como avanzar.
os explico, me pasan 4 imagenes de diferentes carreteras y me piden que, mediante una deteccion de bordes, pinte las linias blancas que delimitan la carretera, asi como las linias discontinuas, con sendas linias rojas y que ademas pinte una 4ta linia verde en el centro del carril derecho.
yo he conseguido realizar la deteccion de bordes y la posterior dilatacion para resaltar los bordes, pero a partir de ahi no se como seguir, pues he intentado crear una matriz de tres capas y extraer la capa roja para multiplicar-la con la imagen erosionada y posteriormente multiplicar esta ultima con la original capa a capa pero no consigo resultados satisfactorios.
agradeceria vuestra ayuda.
adjunto codigo e imagenes.
function [current_line, img_out] = pdi_T3_ex_3(image_filname)
%cargamos la imagen
road = imread(image_filname);
%calculemos el tamanyo de la imagen
mides = size(road);
mida_y = mides(1);
mida_x = mides(2);
% disp(mides);
%pasamos la imagen a blanco y negro
road_bw = im2bw(road,0.85);
%realitzemos la deteccion de bordes
road_bw_edge = edge(road_bw, 'sobel', [],'vertical');
%creamos un elemento estructural
SE = strel('square', 16);
%aplicamos una dilatacion
road_dilate = imdilate(road_bw_edge, SE);
%realitzemos un crop
road_crop = imcrop(road_dilate, [0 mida_y/3 mida_x mida_y]);
% s = size(road_crop);
% disp(s);
% imshow(road_crop)
%declaremos una imagen en color y del mismo tamaño que la imagen original
matRGB = uint8(ones(mida_y, mida_x, 3));
R = matRGB(:,:,1);
G = matRGB(:,:,2);
B = matRGB(:,:,3);
RGB(:,:,1) = R;
RGB(:,:,2) = G;
% figure
% subplot(211)
% imshow(R)
% subplot(212)
% imshow(G)
% sizeRGB = size(matRGB);
% sizeR = size(R);
% sizeG = size(G);
% disp(sizeRGB);
% disp(sizeR);
% disp(sizeG);
figure
subplot(321)
imshow(road)
subplot(322)
imshow(road_bw)
subplot(323)
imshow(road_bw_edge)
subplot(324)
imshow(road_dilate)
subplot(325)
imshow(road_crop)




muchas gracias!
Valora esta pregunta


0