Voglio tracciare una linea da un punto ben definito a un altro e quindi trasformarla in una matrice di immagini per utilizzare un filtro gaussiano su di esso per la levigatura. Per questo uso le funzioni line
e getframe
per tracciare una linea e acquisire la finestra della figura in un'immagine, ma getframe
è molto lento e poco affidabile. Ho notato che non cattura nulla quando il computer è bloccato e ho ricevuto un errore out of memory
dopo 170 esecuzioni.Come si crea una matrice di immagini con una linea disegnata in MATLAB?
Le mie domande sono:
- C'è un sostituto per
getframe
che posso usare? - C'è un modo per creare la matrice immagine e tracciare la linea direttamente in essa?
Ecco un esempio di codice minima:
figure1=line([30 35] ,[200 60]);
F= getframe;
hsize=40; sigma=20;
h = fspecial('gaussian',hsize,sigma);
filteredImg = imfilter(double(F.cdata), h,256);
imshow(uint8(filteredImg));
[update]
ad alte prestazioni l'idea di Marco con linspace
sembra molto promettente, ma come faccio ad accedere alla matrice coordinate calcolate con linspace
? Ho provato il seguente codice, ma non funziona come penso che dovrebbe. Suppongo che sia una cosa molto semplice e di base MATLAB, ma non riesco proprio a avvolgere la mia testa intorno ad esso:
matrix=zeros(200,60);
diagonal=round([linspace(30,200,numSteps); linspace(35,60,numSteps)]);
matrix(diagonal(1,:), diagonal(2,:))=1;
imshow(matrix);
Allora, che cosa si sta facendo è rasterizzazione di un'immagine vettoriale. Un sacco di buone referenze su questo argomento, Wikipedia, come sempre, è un buon punto di partenza. –
Lo so, ma cerco sempre di usare le stesse funzioni di Matlab. Non imparo tanto, ma sono più veloci e non devo passare il tempo a debuggarle come il mio codice. – Framester