Cómo reducir el impacto de la iluminación diferente entre los fotogramas delantero y trasero durante el procesamiento de imágenes
Pasos
1. Realizar un filtrado de valor máximo (mínimo) para obtener inicialmente el mapa de iluminación.
2 Realizar un filtrado medio (o gaussiano) para obtener el final. mapa de distribución de iluminación
3. Resta la imagen de iluminación de la imagen original para obtener el objetivo de primer plano
Un castaño
Toma la imagen rice.png que viene con matlab como ejemplo. Esperamos poder distinguir el arroz del fondo. El enfoque intuitivo es utilizar la segmentación de umbral para crear una imagen binaria y luego marcar las áreas conectadas, de modo que podamos conocer el tamaño y la posición central de cada arroz.
Sin embargo, si observa de cerca la imagen del arroz, encontrará que la iluminación durante la fotografía es desigual, lo que dificulta el uso de un umbral global para la segmentación. La segmentación directa hará que parte del fondo se vea afectada. ser reconocido como un objetivo (el umbral es demasiado pequeño) o Algunos objetivos se pierden (el umbral es demasiado grande). ¿Cuál sería el resultado si se eliminara la iluminación desigual y luego se binarizara?
Código
función newIm= DUCO_RemoveBackGround(im,w,isShow)
%im: imagen original; w filtro tamaño de ventana isShow si se muestra el intermedio; procesar
%
%
if isShow==1
figura
imshow(im,[] )
end
bk=double(im);
%1 filtro de valor mínimo
bk=ordfilt2(bk,1. , ones(w,w),'metric');
if isShow==1
figura
subtrama(2,2,1) p >
imshow(bk,[]),title('Resultado después del filtrado del valor mínimo'); %Mostrar la imagen filtrada
end
%2. /p>
h=ones(w,w)/(w*w);
bk=imfilter(bk,h,'replicate');
if isShow ==1
subplot(2,2,2)
imshow(bk,[]),title('Resultado después del filtrado medio'); %Visualización después del filtrado de imagen p>
end
%3. El resultado de restar el brillo desigual
newIm=imsubtract(double(im),bk);
if isShow ==1
subplot(2,2,3)
imshow(newIm,[]);title('Eliminar imagen de fondo'); p>
end
%4. Binarizar y segmentar el objetivo
th=graythresh(newIm/255);
newIm=im2bw(newIm /255,th);
if isShow==1
subplot(2,2,4)
imshow(newIm),title('valor binario El resultado%Display'); la imagen filtrada
end
end