todas tienen studio quitar pez online ojo las hero gopro efecto corregir matlab image-processing geometry

tienen - ¿Cómo puedo implementar un efecto de lente de ojo de pez(transformación de barril) en MATLAB?



quitar efecto ojo de pez photoshop (3)

¿Cómo se puede implementar el efecto de lente de ojo de pez ilustrado en esa imagen?

Uno puede usar el logo de Google para probar:

Por cierto, ¿cuál es el término para eso?


Creo que te estás refiriendo al efecto de lente ojo de pez. Aquí hay un código para imitar ojo de pez en matlab.


Para que conste:

Este efecto es un tipo de distorsión radial llamada "distorsión de barril".

Para obtener más información, consulte:

http: //en.wikipedia.org/wiki/Distortion_(optics)

Aquí hay un método diferente para aplicar un efecto similar a la distorsión de barril mediante el mapeo de textura (adaptado de la documentación de MATLAB ):

[I,map] = imread(''logo.gif''); [h,w] = size(I); sphere; hS = findobj(''Type'',''surface''); hemisphere = [ones(h,w),I,ones(h,w)]; set(hS,''CData'',flipud(hemisphere),... ''FaceColor'',''texturemap'',... ''EdgeColor'',''none'') colormap(map) colordef black axis equal grid off set(gca,''xtick'',[],''ztick'',[],''ytick'',[],''box'',''on'') view([90 0])

Esto le dará el marco circular que está buscando pero los artefactos de aliasing podrían ser demasiado para tratar.


Creo que esto se conoce comúnmente como un efecto de "ojo de pez" o una "transformación de barril". Aquí hay dos enlaces a demos que encontré:

Ejemplo

En este ejemplo, comencé con la función radial.m del primer enlace de arriba y modifiqué la forma en que relaciona los puntos entre los espacios de entrada y salida para crear una bonita imagen circular. La nueva función fisheye_inverse se da a continuación, y debe colocarse en una carpeta en su ruta MATLAB para que pueda usarla más adelante en este ejemplo:

function U = fisheye_inverse(X, T) imageSize = T.tdata(1:2); exponent = T.tdata(3); origin = (imageSize+1)./2; scale = imageSize./2; x = (X(:, 1)-origin(1))/scale(1); y = (X(:, 2)-origin(2))/scale(2); R = sqrt(x.^2+y.^2); theta = atan2(y, x); cornerScale = min(abs(1./sin(theta)), abs(1./cos(theta))); cornerScale(R < 1) = 1; R = cornerScale.*R.^exponent; x = scale(1).*R.*cos(theta)+origin(1); y = scale(2).*R.*sin(theta)+origin(2); U = [x y]; end

La distorsión de ojo de pez se ve mejor cuando se aplica a imágenes cuadradas, por lo que querrá hacer que las imágenes cuadren recortándolas o rellenándolas con un poco de color. Dado que la transformación de la imagen no se verá bien para las imágenes indexadas , también deseará convertir cualquier imagen indexada en imágenes RGB utilizando ind2rgb . Las imágenes en escala de grises o binarias también funcionarán bien. A continuación, le indicamos cómo hacer esto para su muestra del logotipo de Google :

[X, map] = imread(''logo1w.png''); % Read the indexed image rgbImage = ind2rgb(X, map); % Convert to an RGB image [r, c, d] = size(rgbImage); % Get the image dimensions nPad = (c-r)/2; % The number of padding rows rgbImage = cat(1, ones(nPad, c, 3), rgbImage, ones(nPad, c, 3)); % Pad with white

Ahora podemos crear la transformación con maketform y aplicarla con imtransform (o imwarp como se recomienda en las versiones más nuevas):

options = [c c 3]; % An array containing the columns, rows, and exponent tf = maketform(''custom'', 2, 2, [], ... % Make the transformation structure @fisheye_inverse, options); newImage = imtransform(rgbImage, tf); % Transform the image imshow(newImage); % Display the image

Y aquí está la imagen que debes ver:

Puede ajustar el grado de distorsión cambiando el tercer valor en la matriz de options , que es la potencia exponencial utilizada en la deformación radial de los puntos de la imagen.