Superupplösningstekniker
Superupplösningstekniker kan grovt delas in i:
Traditionella interpolationsbaserade metoder (Bilinear, Bicubic, Lanczos);
Djupinlärningsbaserad superupplösning (CNN:er, GAN:er, Transformatorer).
Traditionella interpolationsbaserade metoder
Interpolation är en av de enklaste metoderna för superupplösning, där saknade pixlar uppskattas baserat på omgivande pixelvärden. Alla vanliga interpolationsmetoder inkluderar cv2.resize()
, men parametern interpolation
skiljer sig åt:
Närmaste grannes interpolation
Kopierar det närmaste pixelvärdet till den nya positionen;
Ger skarpa men blockiga bilder;
Snabb men saknar jämnhet och detaljrikedom.
Bilinjär Interpolering
Medelvärde av fyra närliggande pixlar för att uppskatta det nya pixelvärdet;
Ger mjukare bilder men kan introducera oskärpa.
Bikubisk Interpolering
Använder ett viktat medelvärde av 16 omgivande pixlar;
Ger bättre mjukhet och skärpa jämfört med bilinjär interpolering.
Lanczos-interpolering
Använder en sinc-funktion för att beräkna pixelvärden;
Erbjuder bättre skärpa och minimal aliasing.
Även om interpolationsbaserade metoder är beräkningsmässigt effektiva, misslyckas de ofta med att återställa fina detaljer och texturer.
Djupinlärningsbaserad superupplösning
Förtränade superupplösningsmodeller:
ESPCN (Efficient Sub-Pixel Convolutional Network): Snabb och effektiv för realtids-SR;
FSRCNN (Fast Super-Resolution CNN): Ett lättviktigt nätverk optimerat för hastighet;
LapSRN (Laplacian Pyramid SR Network): Använder progressiv uppskalning för bättre detaljrikedom.
Swipe to start coding
Du har fått en image
med låg upplösning:
- Använd bikubisk interpolering med 4x skala och spara resultatet i
bicubic_image
; - Definiera och skapa ett djupinlärningsnätverksobjekt i variabeln
sr
; - Läs in modellen från
model_path
; - Ange namnet
espcn
och 4x skala; - Använd DNN superupplösningsmetod och spara resultatet i
dnn_image
.
Lösning
Tack för dina kommentarer!