Ho provato a fare qualche "chiacchera" con Copilot. Copilot è la nuova implementazione AI di Microsoft in concorrenza a Bard e ChatGPT.
Bard l'ho usato tempo fà per test ma non mi è parso così brillante, Copilot invece mi ha un pò sorpreso positivamente.
Intanto le risposte che dà sono prima di tutto spiegate in forma testuale con una buona dialettica per essere una soluzione "generalista". Poi fà anche gli esempi commentati, il tutto in un Italiano discorsivo e apparentemente corretto.
Non ho verificato il codice.
Questa un riporto di una "chat" (non ho riportato la formattazione dei paragrafi):
Domanda:
Istogramma gaussiano su immagine con linguaggio Delphi
Risposta:
Un istogramma gaussiano è una rappresentazione grafica della distribuzione dei livelli di grigio di un’immagine, che segue una curva a forma di campana. Per creare un istogramma gaussiano su un’immagine con il linguaggio Delphi, si possono seguire i seguenti passi:
Caricare l’immagine da analizzare in una variabile di tipo TBitmap.
Creare un array di 256 elementi di tipo Integer per memorizzare le frequenze dei livelli di grigio.
Inizializzare tutti gli elementi dell’array a zero.
Scorrere tutti i pixel dell’immagine e incrementare il valore dell’elemento corrispondente al livello di grigio del pixel.
Creare un altro TBitmap per disegnare l’istogramma.
Calcolare il valore massimo dell’array delle frequenze e il fattore di scala per adattare l’istogramma alla dimensione del bitmap.
Scorrere tutti gli elementi dell’array e disegnare una linea verticale sul bitmap con altezza proporzionale alla frequenza e colore grigio.
Visualizzare il bitmap con l’istogramma.
Un esempio di codice Delphi che implementa questi passi è il seguente:
uses
Graphics;
const
N = 256; // numero dei livelli di grigio
var
Image, Histogram: TBitmap; // bitmap per l'immagine e l'istogramma
Freq: array[0..N-1] of Integer; // array delle frequenze
i, j, k, max, h: Integer; // variabili ausiliarie
c: TColor; // variabile per il colore dei pixel
scale: Double; // fattore di scala
begin
// caricare l'immagine da analizzare
Image := TBitmap.Create;
Image.LoadFromFile('image.bmp');
// inizializzare l'array delle frequenze a zero
for i := 0 to N-1 do
Freq[i] := 0;
// scorrere tutti i pixel dell'immagine e incrementare le frequenze
for i := 0 to Image.Width-1 do
for j := 0 to Image.Height-1 do
begin
c := Image.Canvas.Pixels[i,j]; // leggere il colore del pixel
k := (c and $FF + (c shr 8) and $FF + (c shr 16) and $FF) div 3; // calcolare il livello di grigio medio
Freq[k] := Freq[k] + 1; // incrementare la frequenza corrispondente
end;
// creare il bitmap per l'istogramma
Histogram := TBitmap.Create;
Histogram.Width := N; // larghezza uguale al numero dei livelli di grigio
Histogram.Height := Image.Height div 2; // altezza pari alla metà dell'altezza dell'immagine
// calcolare il valore massimo delle frequenze e il fattore di scala
max := 0;
for i := 0 to N-1 do
if Freq[i] > max then max := Freq[i];
scale := Histogram.Height / max;
// scorrere tutti gli elementi dell'array e disegnare le linee sull'istogramma
for i := 0 to N-1 do
begin
h := Round(Freq[i] * scale); // calcolare l'altezza della linea
c := RGB(i,i,i); // calcolare il colore grigio corrispondente al livello
Histogram.Canvas.Pen.Color := c; // impostare il colore della penna
Histogram.Canvas.MoveTo(i,Histogram.Height); // spostare la penna al punto in basso a sinistra della linea
Histogram.Canvas.LineTo(i,Histogram.Height-h); // tracciare la linea verticale verso l'alto
end;
// visualizzare l'istogramma
Histogram.SaveToFile('histogram.bmp'); // salvare il bitmap su file (opzionale)
end;
E soprattutto riporta i riferimenti, le fonti e eventuali esempi esecutivi (vedi immagine allegata).
In pratica si ha tutto ciò che si vuole sull'oggetto della domanda.
Voi avete provato i vari AI ? Cosa ve ne sembra ?