Matlab - Patron de moteado

 
Vista:

Patron de moteado

Publicado por Ruben (7 intervenciones) el 28/05/2019 12:55:23
Buenos días,

Necesito crear un patrón de moteado (puntos negros sobre fondo blanco) y estaba intentándolo con la función viscircles, pero necesito que el radio de mis círculos sea mayor al radio de estos para evitar que se superpongan.
Basicamente necesito crear una matriz columna con el valore de los radios que sean menores a una matriz columna de la distancia entre centros.
por ejemplo estos serian los centros y las distancias:

1
2
3
4
5
X = [4,3]';
Y = [2,1]';
centers = [X,Y];
resta = (X-Y).^2;
d = sqrt(resta);

No se como hacer una matriz de radios que sea menor valor a valor a la matriz distancia
¿Alguna ayuda?
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Patron de moteado

Publicado por Daniel (354 intervenciones) el 28/05/2019 18:39:08
Hola,

La segunda parte de la pregunta no la endiento bien, pero si quieres un patrón de moteado puedes usar algo como:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
data = ones(300,300);
 
center = [130, 140; 220, 230; 30, 220];
radio = 15;
 
for i = 1:300
    for j = 1:300
        if any(sqrt(sum((center - [i, j]).^2, 2)) < radio)
            data(i, j) = 0;
        end
    end
end
 
imshow(data);



Saludos,
Daniel Rodríguez.
Analytics Lane
Matlab en Analytics Lane
untitled
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Patron de moteado

Publicado por Ruben (7 intervenciones) el 29/05/2019 10:34:55
Muchas gracias Daniel si que creo que me sirve.

Tengo otra duda, hay otro apartado también para crear un patrón de moteado que dice de sacar una posición aleatoria para el centro de un circulo en un rango de dimensiones de un folio A4 y luego ir sacando nuevas posiciones aleatorias comprobando que la distancia entre los centros es mayor al diámetro, si es mayor vale el circulo, si es menor se descarta y se crea otro circulo nuevo, así hasta 10 círculos de radio 2 cm.

Ponen que recomiendan la función viscircles. ¿Alguna idea?

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Patron de moteado

Publicado por Daniel (354 intervenciones) el 29/05/2019 15:40:02
Hola,

La función viscircles es para dibujar círculos en uno ejes. Lo que yo he escrito es para hacer imágenes, son dos enfoques diferentes para hacer cosas diferentes.

Si en cada fila de puntos se define un punto y en centro otro, la distancia de todos los puntos a centro se puede calcular con:

1
sqrt(sum((puntos - centro).^2, 2))

Ahora solo queda comprobar si el mínimo es menor que un radio dado

Saludos,
Daniel Rodríguez.
Analytics Lane
Matlab en Analytics Lane
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Patron de moteado

Publicado por Rubén (7 intervenciones) el 31/05/2019 12:45:08
pff no me sale...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Patron de moteado

Publicado por Rubén (7 intervenciones) el 31/05/2019 13:45:40
Buenas Daniel,

Te comento yo te preguntaba por ejemplos para poder desarrollar un patrón para un análisis DIC, tampoco quería que me dieses la solución sino algún consejo para ir tirando, te enseño lo que llevo, porque me da error y no se que hago mal...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
% Patron de moteado
 
%La idea es sacar una posicion aleatoria para el centro del circulo (la primera la pones directamente)
%Luego sacas nuevas posiciones aleatorias y compruebas la distancia entre
%centros, de la nueva posicion y la que tienes puesta, si la distancia es
%mayor que el diametro el nuevo circulo vale, si no, lo descartas y creas
%otro nuevo, asi hasta tener suficientes
 
%Resolucion de la camara 4608x3072 pixels
P = 4608;
Q = 3072;
%Tamaño folio A4 210x297 mm
b = 210;
h = 297;
%Tamaño del radio sabiendo que cada circulo debe ocupar 2 pixels
r = (b/P)*(sqrt(2/pi));
%Como el radio es menor a 1mm multiplico radio por 100 para poder trabajar
%con numeros sin decimales, la matriz de 1 se amplia tambien por 10.
radio = round(100*r);
%Diametro
D = radio*2;
%Numero optimo de motas para garantizar un 50:50 de ratio blanco negro
motas = round((b*h)/(2*D));
%Creacion de matriz tamaño folio de 1 que serán el fondo blanco, cuando se
%cambien 1 por 0 se pondra de negro
data = ones(100*b,100*h);
%Crear buble hasta motas para crear el Nº de centros requerido, haciendo
%que la distancia entre centros sea mayor al diametro
for k = 1:motas
        X(k) = 100*b*rand;
        Y(k) = 100*h*rand;
        center(k,k) = [X(k),Y(k)];
    for i = 1:100*b
     for j = 1:100*h
        %La distancia entre dos puntos se calcula como el calculo de la
        %hipotenusa de un triangulo formado entre 2 puntos.
        distancia = sqrt(((X(k)-X(k+1))^2)+((Y(k)-Y(k+1))^2),2);
        %para pintar un circulo negro se cambian 1 por 0 en la funcion
        %imshow
        pintar = (sqrt(sum((center - [i, j]).^2, 2));
        %Cambiar solo los 1 a 0 que sean menores a una distancia del radio
        %y aquellos cuya distancia a oreos centros sea mayor al diametro
        if any(pintar < radio) and (distancia > D)
            data(i,j) = 0;
        end
     end
    end
end
 
imshow(data);


PD: Necesito crear un patrón de moteado donde cada mota ocupe 2 pixels y que ninguna mota se toque manteniendo un ratio de 50:50 blanco-negro para tener buen contraste.

A ver si puedes darme algun consejo. Muchas gracias por tu tiempo y ayuda.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar