Matlab workbook concerning: interpolation and approximation with least squares.
This is the second part of a project implemented in Matlab. The first part is called "Homework1".
Trace of the problem:
Take a photograph of an object of your interest or search for its image on a search engine (choose something whose outline allows you to recognize the object, for example a ship, an airplane, a car, a boat, ... .). Store the image in your Matlab file folder with the name myphoto and then load it into Matlab from the command window using the command A = imread ('myphoto') ;. View the photo of the object with the command image(A). Select, proceeding clockwise, 50 points of the object contour using the command [x, y] = ginput (50); . The generic point of the contour will have x (i), y (i) coordinates.
The Report has as its first command the command to load your data, that is the command load DatiHW** (to load the photo and the points). Then proceed as follows:
1.View the photo of the object in the same figure and then the 50 points highlighted with a red asterisk on the outline. The components of vectors x and y can be scaled, e.g. dividing them by 1000, then they must be centered in the centroid (centroid of the figure) and finally they must be extended by adding in the tail a fictitious point equal to the first point, so that x and y are the vectors of the coordinates of the vertices of a (closed) polygon. 2. Using the vertices of the polygon obtained in 1, construct myphotoS, that is the parametric curve, based on the interpolating cubic splines, which interpolates these points. Use cubic splines with first derivative fixed in the endpoints (choose an appropriate value of the derivative for both splines). Display both the spline graph that interpolates the abscissas of the points, and the spline graph that interpolates the ordinates of the points, and myphotoS indicating the points in blue (for all three graphs, use a dense grid of 500 points). 3. Repeat everything required in 2. to construct myphotoC, that is the parametric curve based on Hermite cubics. Calculate the infinite norm of the vector (of 500 components) which has as its i-th component the distance between the i-th point of myphotoS and the i-th point of myphotoC. 4. Consider the polygon of 500 vertices made up of the values of the parametric curve myfotoS. Display this polygon in red, using the fill command. Calculate and visualize the perimeter and area of this polygon using the PolyLength and PolygonArea functions developed in the ONLINE Tutorial8. 5.Repeat everything required in 4. for the parametric curve myphotoC. Calculate and visualize the difference between the perimeter of myphotoS and myphotoC and the difference between the area of myphotoS and myphotoC. 6. Build the matrix D of the distances of the 51 points obtained at the end of question 1. that is, the square matrix of order 51 whose element (i, j) is the distance between point i and point j. Visualize the block of D involving the distances between the first 8 points. 7. Using the distance matrix D obtained in 6., determine the distance between the two furthest points on the edge of the object (i.e. the diameter of the cloud of points), visualize this distance and display a figure with the outline of the object and the segment (in red) that joins the two furthest points. 8. Set a theta angle at random (use rand appropriately) between 10 and 80 degrees and rotate myfotoS clockwise by this angle and myfotoC counterclockwise. View in the same figure myfotoS and myphotoS rotated and then in another figure myfotoC and myfotoC rotated. 9. Using the vertices of the polygon obtained in 1, construct myfotoAppr5, that is the parametric curve, based on the approximation in the sense of least squares with polynomials of degree 5., obtained by separately approximating the abscissas and ordinates of these points. Display both the graph of the polynomial that approximates the abscissas of the points in the MQ sense, both the graph of the polynomial that approximates the ordinates of the points in the MQ sense, and myfotoAppr5, indicating the points in blue (for all three graphs, use a grid dense of 500 points).
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Questa è la prima parte di un progetto implementato in Matlab. La prima parte si chiama "Homework1".
Traccia del problema:
Scattare una fotografia di un oggetto di vostro interesse o cercarne l'immagine su un motore di ricerca (scegliere qualcosa il cui contorno permetta di riconoscere l'oggetto, ad esempio una nave, un aereo, un'auto, una barca,....). Memorizzare l'immagine nella vostra cartella dei file Matlab con il nome miafoto e poi caricarla in Matlab dalla finestra comandi usado il comando A=imread('miafoto');.
Visualizzare la foto dell'oggetto con il comando image(A).
Selezionare, procedendo in verso orario, 50 punti del contorno dell'oggetto usando il comando [x,y]=ginput(50); . Il generico punto del contorno avrà coordinate x(i),y(i) . Salvare la foto e i 50 punti del contorno sul proprio pc con il comando save DatiHW2** A x y , dove ** devono essere sostituiti dalle iniziali in maiuscolo del vostro nome e cognome (per esempio, nel mio caso, il comando è save DatiHW2GG A x y ). Il file DatiHW2** deve essere consegnato insieme al file della Relazione.
I comandi elencati finora servono solo a creare i dati da utilizzare nella Relazione e NON devono far parte della Relazione in Live Editor.
La Relazione ha come primo comando il comando di caricamento dei vostri dati, cioè il comando load DatiHW** (per caricare la foto e i punti). Poi procedere come segue.
1.Visualizzare nella stessa figura la foto dell'oggetto e successivamente i 50 punti evidenziati con un asterisco rosso sul contorno. Le componenti dei vettori x e y possono essere scalate, per es. dividendole per 1000, poi devono essere centrate nel baricentro (centroide della figura) e infine devono essere estese aggiungendo in coda un punto fittizio uguale al primo punto, in modo tale che x e y siano i vettori delle coordinate dei vertici di un poligono (chiuso).
2.Usando i vertici del poligono ottenuti in 1, costruire miafotoS, cioè la curva parametrica, basata sulle spline cubiche interpolanti, che interpola tali punti. Usare le spline cubiche con derivata prima fissata negli estremi (scegliere un valore appropriato della derivata per entambe le spline). Visualizzare sia il grafico della spline che interpola le ascisse dei punti, sia il grafico della spline che interpola le ordinate dei punti, sia miafotoS indicando in blu i punti (per tutti e tre i grafici, usare una griglia fitta di 500 punti).
3.Ripetere tutto quanto richiesto in 2. per costruire miafotoC, ovvero la curva parametrica basata sulle cubiche di Hermite. Calcolare la norma infinito del vettore (di 500 componenti) che ha per i-sima componente la distanza tra l' i-simo punto di miafotoS e l' i-simo punto di miafotoC.
4.Considerare il poligono di 500 vertici costituito dai valori della curva parametrica miafotoS. Visualizzare in rosso tale poligono, usando il comando fill. Calcolare e visualizzare il perimetro e l'area di questo poligono usando le function LunghezzaPoligonale e AreaPoligono sviluppate nell'Esercitazione ONLINE8.
5.Ripetere tutto quanto richiesto in 4. per la curva parametrica miafotoC. Calcolare e visualizzare la differenza tra il perimetro di miafotoS e miafotoC e la differenza tra l'area di miafotoS e miafotoC.
6.Costruire la matrice D delle distanze dei 51 punti ottenuti al termine della domanda 1. cioè la matrice quadrata di ordine 51 il cui elemento (i,j) è la distanza tra il punto i e il punto j . Visualizzare il blocco di D che coinvolge le distanze tra i primi 8 punti.
7.Usando la matrice delle distanze D ricavata in 6., determinare la distanza tra i due punti più lontani del bordo dell'oggetto (ovvero il diametro della nube di punti), visualizzare tale distanza e visualizzare una figura con il contorno dell'oggetto e il segmento (in rosso) che unisce i due punti più lontani.
8.Fissare un angolo teta a caso (usare opportunamente rand) tra 10 e 80 gradi e fare ruotare in verso orario miafotoS di tale angolo e in verso antiorario miafotoC. Visualizzare nella stessa figura miafotoS e miafotoS ruotata e poi in un'altra figura miafotoC e miafotoC ruotata.
9.Usando i vertici del poligono ottenuti in 1, costruire miafotoAppr5, cioè la curva parametrica, basata sull'approssimazione nel senso dei minimi quadrati con polinomi di grado 5., ottenuta approssimando separatamente le ascisse e le ordinate di tali punti. Visualizzare sia il grafico del polinomio che approssima nel senso MQ le ascisse dei punti, sia il grafico del polinomio che approssima nel senso MQ le ordinate dei punti, sia miafotoAppr5, indicando in blu i punti (per tutti e tre i grafici, usare una griglia fitta di 500 punti).