Det enkla svaret på din fråga är "Ja, det finns algoritmer, men ingen av dem är särskilt bra." Som du nämnde i frågan är den begränsande faktorn att behöva uppfinna pixlarna på nytt för att öka upplösningen med en liten mängd. (Det är därför du inte kan läsa ett registreringsnummer från reflektionen i någons glasögon från ett foto taget från en säkerhetskamera, som händer i CSI: Miami.)
Om allt du vill göra är att skapa en större bild (för ett väggtak eller liknande), kan du använda ett Photoshop-plugin som jämnar ut övergångarna mellan pixlar med hjälp av befintlig information. Det kan inte skapa nya pixlar, men det kan bli av med det där fyrkantiga, taggiga utseendet.
Lägga till tidigare svar: Observera att svaret på din fråga beror mycket på exakt vad du menar med upplösning – visningsenheter, infångningsenheter eller visningsenheter (d.v.s. det mänskliga ögat). Jag antar att du pratar om bitmappar (problemet kommer inte att existera för vektorbilder.)
Du måste erkänna att en bild tagen med högre upplösning kommer att innehålla mer bildinformation (d.v.s. detaljer) än en bild av samma scen tagen med lägre upplösning. Det är inte möjligt att lägga till denna information ur tomma intet. Skalningsalgoritmer syntetiserar viss information baserat på antagandet om kontinuitet mellan element i en diskret bitmapp. Denna "nya" information är egentligen inte ny, utan härleds från redan existerande information om bilden, så den kan inte anses ha en 100% chans att matcha den ursprungliga scenen. Effektivare algoritmer kan ge bättre sannolikheter, men deras resultat kommer alltid att ha en matchningssannolikhet mindre än 1.
Ett sätt att öka upplösningen är att ta flera bilder, förstora dem till 4x områden (2x linjära i båda riktningarna) och använda staplingsprogram för att slå samman bilderna. Den slutliga bilden blir bättre än något av originalen.
Att förstora bilder är riskabelt. Bortom en viss punkt är att förstora bilder ett galet ärende; du kan inte på ett magiskt sätt syntetisera ett oändligt antal nya pixlar ur tomma intet. Och interpolerade pixlar är aldrig lika bra som riktiga pixlar. Det är därför det är mer än konstlat att förstora Lenas 512x512 bild med 500%. Det skulle vara mer meningsfullt att hitta en större skanning eller bild av det du behöver* än att förstora den i programvaran.
I vissa fall kan högupplösta algoritmer hjälpa. Jag kan inte allt relaterat (mjukvara/hårdvara och källbilder krävs) men om du är intresserad finns det några länkar:
Du kan rita en bild med verktyg som autotrace eller potrace och använda den i valfri upplösning. Men det är beräkningsmässigt dyrt, så du får en bild med flera färger/funktioner och ännu mindre om du behöver arbeta snabbt med den.
Om du behöver göra detta algoritmiskt, kolla in bildskalningslänken som föreslagits av Draemon. Vilken plattform kommer du att göra dessa interpolationer på? De flesta grafikbibliotek kommer att implementera många metoder för att balansera hastighet och kvalitet.
Många fotografer som arbetar med digitala bilder står inför situationen där en digital bild är mindre än den behöver skrivas ut. För att göra en bild större med samma upplösning måste du lägga till nya pixlar till den. Uppgiften är att beräkna färgen på de nya pixlarna som ska läggas till mellan de befintliga. Denna procedur kallas uppsampling och löses genom att använda olika algoritmer. Av de välkända uppsamplingsalgoritmer som har använts i många år bör tre nämnas:
- metod för att kopiera närmaste pixel (Nearest neighbor interpolation) - är att nya pixlar av samma färg som de som finns i närheten läggs till i bilden. Färgpunkter dupliceras - ju fler av dem som skapas, desto större bör bilden vara. Denna procedur leder till uppkomsten av steg, som bildas på grund av att de kontinuerliga kurvorna för färgförändring blir stegade. Sådana bilder kallas taggiga bilder 1 , eller bara jaggies;
- bilinjär interpolation (bilinjär interpolation) - utförs på basis av fyra intilliggande pixlar, ger jämna kanter (inga steg visas), men den förstorade bilden är suddig;
- Bikubisk interpolation (Bicubic interpolation) - ger något bättre resultat än bilinjär interpolation, baseras på analys av 16 angränsande pixlar, vilket ger en jämnare ökning av storleken. I Photoshop föreslås det att man använder den bikubiska algoritmen. För en liten ökning (upp till 150%) ger denna metod bra resultat, men med en ytterligare ökning sjunker kvaliteten dramatiskt.
På fig. 1 visar ett exempel på fotobehandling med traditionella interpolationsalgoritmer.
Alla dessa metoder leder till defekter i form av spår av interpolation. Nyligen har mer komplexa algoritmer dykt upp som tillåter att minimera interpolationsdefekter. Baserat på dem har specialiserade applikationer skapats, gjorda i form av fristående program eller plug-ins för Photoshop och andra populära grafiska redigerare. Sådana plug-ins är nödvändiga för alla som har att göra med lågupplösta bilder från digitalkameror, videokameror, internet etc.
På fig. Figur 2 visar exempel på bearbetning av originalfotot (se figur 1) med programmet Imagener från Kneson Software.
från Kneson Software
Moderna uppsamplingsprogram låter dig förvandla små bilder tagna från webbplatser till utskrivbara bilder, titta på oklara detaljer i gamla fotografier och så vidare. Sådana program används inte bara i prepress, utan också inom områden som medicin, rättsmedicin och astronomi.
Den här artikeln diskuterar inte bara uppsamplingsapplikationer skapade av bildbearbetningsföretag, utan även program utvecklade av enskilda programmerare. De flesta av programmen som behandlas i den här artikeln finns på vår CD-ROM-applikation.
1 Bild med ojämna (skakiga, stegade) kanter.
bildapparat
Utvecklare: Kneson programvara
Plattform: Windows
Programmet finns i tre versioner: Enhanced - $29,95, Professional - $49,95, Unlimited - $99,95.
Ett av de bästa programmen inom området digital bildförstoring, tillgängligt i tre versioner - Enhanced, Professional och Unlimited.
Imagener förbättrad förstoring
Applikationen tillhandahåller förstoring av digitala bilder i formaten JPG, GIF, TIF, BMP, PCX, PSD, ETC. Den använder en intelligent modul som analyserar ett stort område runt varje pixel för att öka kvaliteten på bilden. Applikationen låter dig uppnå 200-300 procents ökning utan märkbar kvalitetsförlust.
Imagener Professional Enlargement
Applikationen har alla funktioner i den förbättrade versionen, och dessutom använder den Kneson Progressive ++ Enlargement Method, som är baserad på innehållsberoende interpolation som tar hänsyn till bildens komplexitet. Programmet låter dig utföra mer än 300 procents ökning utan en visuellt märkbar kvalitetsförlust.
Imagener Obegränsad förstoring
Denna version har funktionerna för Imagener Enhanced och Imagener Professional, och dessutom använder den interpolationstekniken Kneson Unlimited ++ Enlargement Method, som först konverterar en rasterbild till en vektorbild, sedan ökar den, vilket ger hög kvalitet, och sedan rastrar bilden omvänt till ett av de populära formaten, såsom JPEG, GIF eller TIF (Fig. 3).
Ris. 3. Ett exempel på driften av programmet Imagener Unlimited Enlargement
Enligt utvecklaren har Imagener Unlimited-tekniken utvecklats i cirka tio år och det har investerats mer än 2,5 miljoner dollar i. Det finns en demoversion.
Jämförande egenskaper för versionerna av Imagener-programmet ges i tabell. ett.
Applikationer kan laddas ner på: http://www.imagener.com/Download.html
Pxl SmartScale 1
Utvecklare: Extensis Inc.
Pris: 199,95 USD
Plattform: Windows och MacOS
Pxl SmartScale är ett av de dyraste interpolationsprogrammen som finns. Utvecklarna avslöjar inte kärnan i de implementerade algoritmerna och deklarerar bara att programmet ger en ökning i storlek upp till 1600% utan någon synlig kvalitetsförsämring (Fig. 4). Bland de användbara funktionerna i programmet är förhandsgranskning, möjligheten att kontrollera skärpan och kontrasten i den resulterande bilden, beskärning. En 30-dagars testversion är tillgänglig.
upp till 1600 % storleksökning
ingen synlig kvalitetsförsämring
PhotoZoom Professional
Utvecklare: Genväg
Plattform: Windows och MacOS
Pris: 129 euro
Många fotografer möter den kvalitetsförlust som kommer med att öka storleken på en digital bild. Bieffekterna av detta är oskärpa bilder och ojämna kanter, som är typiska för bilder som har bearbetats i en av de primitiva bildförstoringsapplikationerna. Genväg PhotoZoom Professional (Fig. 5) låter dig förstora digitala bilder utan de ovan nämnda defekterna. Programmet använder S-Spline-teknologi, som är baserad på en patenterad självjusterande interpolationsalgoritm (Fig. 6).
Programfunktioner:
- förbättrad S-Spline-algoritm;
- justeringsverktyg för att förbättra bildkvaliteten när den zoomas in;
- satsvis bearbetning;
- stöd för ett brett utbud av grafiska format;
- fristående applikation eller Adobe Photoshop-plugin;
- gratis testversion.
En billigare version av programmet riktat till hemanvändare kan köpas för 49 euro som en del av programpaketet Shortcut PhotoMagic, som förutom programmet för att förstora bilder utan visuell kvalitetsförlust innehåller ett antal digitala bildbehandlingsverktyg.
Ändra storlek Pro
Utvecklare: Fred Miranda
Plattform: Windows och MacOS
Pris: 30 USD
Resize Pro är ett plugin för Photoshop baserat på interpolationsoperationen. Kärnan i algoritmen är det automatiska urvalet av pixlar som är mest ansvariga för detaljerna i bilden. Dessa pixlar bearbetas på ett speciellt sätt. Denna algoritm låter dig få mer detaljerade och naturliga bilder både när du zoomar in och ut ur bilden.
Vid neddragning säkerställer Resize Pro bästa möjliga kvalitet genom att analysera vilken information från vilka punkter som är viktiga och vilka som kan försummas.
När du använder detta plugin kommer bilden inte att drabbas av yttre effekter som halo runt kontrastområden. En annan funktion i programmet är dess höga hastighet. Resize Pro körs på Photoshop 6, 7, CS, CS2, Elements 1, 2 och 3.
En plugin för en specifik kamera (Fig. 7) finns på: http://www.fredmiranda.com/software.
Äkta fraktaler
Utvecklare: Lizardtech Inc.
Plattform: Windows
Pris:Äkta fraktaler 4.0 - $159; Äkta Fractals PrintPro 4.0 - $299
Genuine Fractals från Lizard Technologies är ett populärt uppskalningspaket för bildupplösning (Figur 8). Interpolationsalgoritmerna som implementeras i Genuine Fractals är baserade på bildkodning med IFS (Iterated functions system) 2-metoden. De gör det möjligt att sträcka individuella fragment av en bild med hänsyn till deras lokala geometriska egenskaper och följaktligen för att undvika interpolationsdefekter (tänder, halos, etc.).
Programmet konverterar bilden till sitt eget Genuine Fractals-format, som lagrar bilden i en mer kompakt form. Detta gör det möjligt att lagra och överföra fler bilder över webben.
Som ett Photoshop-plugin-program lägger Genuine Fractals till en extra funktion till Adobe Photoshop-applikationen - resolution on demand (resolution on demand), det vill säga det låter dig hämta filer med olika upplösningar från en baskod.
Programmet ger möjlighet att öka bilden upp till 600 % utan någon synlig kvalitetsförlust.
Genuine Fractals PrintPro 4.0 stöder alla färgmodeller inklusive CMYK och CIE-Lab.
Demoversionens funktionalitet är begränsad till 12 filoperationer.
Jämförande egenskaper för Genuine Fractals-produkter presenteras i tabell. 2.
2 Metoden för system med itererade funktioner (Iterated Functions System, IFS) dök upp i mitten av 80-talet som ett enkelt sätt att erhålla fraktala strukturer. IFS är ett system av funktioner från någon fast klass av funktioner som mappar en flerdimensionell uppsättning till en annan.
Ändra storlek på magi
Utvecklare: FSoft
Plattform: Windows
Pris: 24 euro
Plugin-programmet Resize Magic Photoshop låter dig inte bara förstora (fig. 9), utan även förminska bilder. Ett olicensierat program infogar etiketter i bilden.
Ris. 9. Bild uppskalad från 500x667
upp till 2800x3735 pixlar: till vänster - med Adobe Photoshop, till höger -
med Resize Magic
Du kan ladda ner programmet på: http://www.fsoft.it/imaging/en/Download.htm .
Ändra storlek på IT
Utvecklare: Brian Spangler
Plattform: Windows
Pris: 25 USD
Resize IT är ett Adobe Photoshop-plugin som fungerar med alla applikationer som stöder Adobe-kompatibla plugins. Om du behöver förstora en 3 megapixel bild till 11 megapixlar, kommer Resize IT att erbjuda flera interpolationsalgoritmer från vilka du kan välja den bästa för ett visst fall. Applikationen kommer att vara användbar för professionella fotografer (Fig. 10). Den oregistrerade versionen låter dig bearbeta 15 bilder.
Inzoomnia
R Utvecklare: Lars Mohrmann
Plattform: Windows
Pris: 15 euro
Inzoomnia är det billigaste programmet i denna recension. Applikationen hanterar raka och rundade linjer bra, men genererar ojämnheter i skarpvinklade bildelement (Figur 11). Det finns en demoversion som inte har möjlighet att spara filer.
och med hjälp av Inzoomnia-algoritmen
Qimage
Utvecklare: Digital domän
Plattform: Windows
Pris: 45 USD
Qimage kommer att vara av intresse för användare som främst är intresserade av att förstora bilder i samband med utskrift. Den är utformad för att skriva ut förstorade bilder med rätt kvalitet. Qimage använder egenutvecklade algoritmer som är intelligentare än bikubisk interpolation.
Programmet låter dig skriva ut bilder med maximal kvalitet, placerar optimalt flera bilder på en sida, vilket sparar dyrt fotopapper (Fig. 12). Förutom intelligenta bildförstoringsalgoritmer finns brusfilter, fläckborttagning, funktioner för justering av ljusstyrka, kontrast, skärpa, bildrotation, spegling m.m. Formaten JPEG, TIF, BMP, GIF, PCX, TGA, PCD, PNG och NEF (Nikon D1 raw) stöds.
Pictura
Utvecklare: Digital multimediadesign
Plattform: Windows
Pris: projektet har ännu inte kommersialiserats
Pictura är ett grafikbearbetningsprogram som använder, brusreducering, fokusering och andra filter som används vid digital fotoredigering och prepress.
Pictura är baserad på AQua-2 (Adaptive Quadratic v.2) interpolationsmetoden, enligt vilken sannolikhetsfördelningen för färgkomponenternas värden beräknas för var och en av de syntetiserade pixlarna, beroende på de lokala egenskaperna hos bild.
Projektet är på stadium att testa en preliminär alfaversion, deltagande i vilken är möjligt med författarnas samtycke (storleken på installationsfilen är 9 MB).
Det finns 711 ord i den här artikeln.
Postnavigering
Som utlovat till Zaria och Roman, om än med en fördröjning, publicerar jag en artikel på ämnet bildförstoring som förberedelse för storformatstryck.
De som skrev ut foton större än 20 x 30 cm upplevde troligen en förlust av detaljer och en banal ”suddig” bild. Du kanske trodde att detta är en konsekvens av otillräcklig kameraupplösning, och du har delvis rätt.
Men i själva verket är allt inte så illa och det finns ingen anledning att springa för att köpa en digital baksida i mediumformat bara för att skriva ut ett foto som är större än 20 x 30 cm.
Adobe Photoshop kom in i våra liv för länge sedan och jag minns själv inte vilken version jag började med (nu använder jag CS6). Denna mjukvaruprodukt är helt enkelt lysande när det gäller bekvämlighet och tillgången till nödvändiga verktyg.
Men dess marknadsförare sover inte heller. Om alla de bästa bildmanipuleringsalgoritmerna implementerades i Photoshop från allra första början, då skulle vi inte se nya versioner, företaget skulle gå i konkurs och vi skulle behöva arbeta med "Stone Age"-gränssnittet.
Under konsumtionssamhällets slag föll bara algoritmerna för att öka och minska bilden. De är med Adobe Photoshop skamlöst föråldrad. Jag har inte sett framsteg på länge, även om plug-ins för en mer korrekt storleksändring har funnits väldigt länge.
Jag kommer till exempel att använda mitt eget foto av smyckeskompositionen "Boy", som föreställer en beväpnad mongolisk pojke.
Original
Till en början hade bilden en upplösning på 3580 x 5382 pixlar. (19 megapixlar, det var en liten skörd).
Om du följer kanonerna för utskrift bör den ha 300dpi i utskriftsfilen.
Om jag avmarkerar kryssrutan "Omsampla" och ställer in den på 300 dpi (dvs. jag kommer inte att använda Adobe Photoshops bildförstoringsverktyg), så kommer Photoshop att räkna om storleken på den resulterande utskriften åt mig.
För denna bildupplösning blir den 30 x 45 cm.
Men låt oss föreställa oss att vi vill skriva ut en banderoll 3 x 6 m (300 x 600 cm) eller 35800 x 53820 pixlar från detta tryck utan nästan ingen kvalitetsförlust. (1927 Mpx = 1,9 Gpx). 1.9 Gpiks i en digitalkamera kommer att vara en dröm för de allra flesta under mycket lång tid, och därför är ämnet för artikeln så relevant.
Så grovt sett måste jag öka den här filen, som inte är så liten för min dator att "smälta", med 10 gånger (eller lite mer, men det brukar vara mer text längst ner på bannern, så vi kommer anta att det är 10 och vi tar inte hänsyn till att banners vanligtvis är horisontella).
Alla ni vet att rutan för bildstorleksändring har Adobe Photoshop finns det alternativ i rullgardinsmenyn längst ner?
Allt du ser i rullgardinsmenyn är interpolationstyper. De där. algoritmer med vilka de saknade pixlarna i bilden kommer att beräknas.
De två första är särskilt gamla algoritmer och den första, Närmaste kvarter, Adobe Photoshop rekommenderas för att bevara kontrasterande kanter i en bild.
Kort sagt, om du beskriver dem, alltså Bikubisk mjukare ger mjuka övergångar mellan verkliga pixlar, och Bikubisk skarpare förbättrar kantkontrasten.
Problemet är att vi inte alltid vill ha de här mjuka övergångarna när vi zoomar in, och när vi zoomar ut ökar det kanterna för mycket, barbariskt. Detsamma kan göras försiktigt, manuellt, och vi återkommer till detta i slutet av artikeln.
Program och plug-ins för högkvalitativ bildförstoring
Eftersom min dator inte kan hantera den gigantiska resulterande filen på 1,9 Gpixel, använder jag ett fotofragment för att demonstrera ökningen med olika algoritmer.
Fragmentet är 607 pixlar brett. Jag ökar den till 3000 pixlar, d.v.s. 5 gånger.
originalfragment
Närmaste granne vs Bicubic Smoother
Som du kan se Närmaste kvarter ger en "stege", som Bikubisk mjukare suddar.
Programvaran PhotoZoom Pro 5
Enkelt gränssnitt, en stor uppsättning matematiska algoritmer för att öka med splines.
Lovande.
Jag tog exakt Bikubisk mjukare som en algoritm från Adobe eftersom de rekommenderar det. Och "stegen" på bilden är inte längre acceptabla i vår tid. Det här är inte 90-talet trots allt!
Tiden för pixel- och sprite-spel är förbi.
Från jämförelsen ser man det PhotoZoom Pro klarat uppgiften att öka bättre. Men är det mycket?
Alien Skin BlowUp2
OCH... PhotoZoom Pro5 vinner!
Skugga om
ReShade installeras som ett separat litet program.
gammalt program Skugga om(2011) vinner över de mer moderna och algoritmrika PhotoZoom Pro. jag försökte PhotoZoom Pro alla algoritmer och märkte ingen signifikant förbättring. Bara förlorad tid.
Så vi har en ny ledare - ReShade, som vi kommer att jämföra de återstående konkurrenterna med.
Kneson Imager
Separat program. Gränssnittet ser ut att vara från Win95.
AKVIS förstoringsglas
Plugin för Adobe Photoshop.
Gränssnittet är snyggt, och resultatet är bedrövligt.
Nästa plugin visade sig vara ledaren. Inte konstigt att jag pekat ut dem bland resten länge ...
OnOne Perfect Resize Professional Edition 7
Plugin för Adobe Photoshop.
ImageJ + Ändra storlek på plugin
Hört talas om det plugin men har inte provat det förrän nu.
Du måste ändra storleken via menyn "Plugins \ Resize \ Resize", metoden "Least-Squares"
Resultatet var inte imponerande. OnOne Perfect Resize vinner.
Adobe Photoshop + bikubisk skarpare
I hans bok Adobe Photoshop CS6-boken för digitala fotografer(Jag har CS6-versionen av boken) Scott Kelby rekommenderar att du använder algoritmen bikubisk vassare för att förstora fotot istället för det rekommenderade bikubisk slätare.
Tja... låt oss försöka.
Resultatet var inte imponerande. OnOne Perfect Resize vinner.
Resultat
1. Jag använder för kritiska bildförstoringar, vilket är vad jag önskar dig.
Skillnaden mellan standardsättet Adobe Photoshop Och OnOne Perfect Resize Professional Edition 7 stor och ganska märkbar i tryck.
2. Om du ska skriva ut mycket stora format, observera att det i CIS numera är vanligt att använda en upplösning på cirka 100 dpi för banners.
För bara stora bilder för utställning (1-2 m) använd 150 dpi om det är svårt att få fler. Betraktningsavstånd är vanligtvis begränsat till 1-2m och från detta betraktningsavstånd ser denna upplösning ganska acceptabel ut.
3. Om du fotograferar på en diabild i mellanformat kommer du att kunna "dra ut" upplösningar från den mycket högre än från en digitalkamera. Upp till 100 megapixlar.
4. Glöm inte skärpningstekniker. Jag jämförde algoritmerna för att öka upplösningen med skärpningen avstängd i artikeln. Men till sluttrycket brukar jag lägga till skärpa. Naturligtvis inte "på pannan", utan till exempel på det här sättet
Nästa gång kommer vi att prata om en lika viktig punkt - att minska storleken på foton för Internet. Det verkar som att det är enklare, men... Nästan alla program gör storleksminskning med en stor detaljförlust.
Jag hoppas att den här artikeln hjälper dig att göra vackra stora utskrifter av dina bilder!
Betygsätt den här artikeln (40
röster, genomsnitt: 4,73
av 5)
Prenumerera på RSS-flöde
Läs också:
Liknande artiklar hittades inte
Lägg till en kommentar Avbryt svar
Varför ser en bild skalad med bikubisk interpolation annorlunda ut än Photoshop. Varför ändrar ett program storlek snabbt och det andra inte, även om resultatet är detsamma. Vilken storleksändringsmetod är bäst för att öka och vilken för att minska. Vad gör filter och hur skiljer de sig åt.
I allmänhet var detta en introduktion till en annan artikel, men det drog ut på tiden och resulterade i ett separat material.
Den här personen sitter bland prästkragarna för att uppmärksamma dig på artikeln.
För visuell jämförelse kommer jag att använda bilder med samma upplösning 1920x1280 (en, sekund), vilket kommer att resultera i storlekarna 330x220, 1067x667 och 4800x3200. Under illustrationerna kommer det att skrivas hur många millisekunder det tog att ändra storlek till en viss upplösning. Siffrorna ges endast för att förstå komplexiteten i algoritmen, så den specifika hårdvaran eller mjukvaran som de erhölls på är inte så viktig.
Närmaste granne
Detta är den mest primitiva och snabbaste metoden. För varje pixel i den slutliga bilden väljs en pixel av källbilden som är närmast dess position, med hänsyn tagen till skalning. Denna metod ger en pixlad bild när den förstoras och en mycket kornig bild när den förminskas.I allmänhet kan kvaliteten och prestandan för varje reduktionsmetod bedömas av förhållandet mellan antalet pixlar som är involverade i bildningen av den slutliga bilden och antalet pixlar i originalbilden. Ju större detta förhållande är, desto mer sannolikt är algoritmen bättre och långsammare. Ett förhållande på ett betyder att minst varje pixel i källbilden har bidragit till den slutliga bilden. Men för avancerade metoder kan det vara mer än en. Så om vi till exempel reducerar bilden med metoden närmaste granne med 3 gånger på varje sida, så är detta förhållande 1/9. De där. de flesta av de ursprungliga pixlarna beaktas inte på något sätt.
1920x1280 → 330x220 = 0,12 ms
1920x1280 → 1067x667 = 1,86 ms
Den teoretiska arbetshastigheten beror endast på storleken på den slutliga bilden. I praktiken, när de minskar, bidrar processorcachemissar: ju mindre skala, desto mindre data används från varje rad som laddas in i cachen.
Metoden används medvetet för att minska extremt sällan, eftersom. ger mycket dålig kvalitet, även om det kan vara användbart när det förstoras. På grund av snabbheten och enkla implementeringen är det i alla bibliotek och applikationer som fungerar med grafik.
Affina transformationer
Affina transformationer är en vanlig metod för att förvränga bilder. De låter dig rotera, sträcka och reflektera bilden i en operation. Därför, i många applikationer och bibliotek som implementerar den affina transformationsmetoden, är bildändringsfunktionen bara ett omslag som beräknar koefficienterna för transformationen.Funktionsprincipen är att för varje punkt i den slutliga bilden tas en fast uppsättning punkter av källbilden och interpoleras i enlighet med deras inbördes position och det valda filtret. Antalet poäng beror också på filtret. För bilinjär interpolation tas 2x2 källpixlar, för bikubisk 4x4. Denna metod ger en jämn bild när den zoomas in, men när den zoomas ut är resultatet mycket likt en närmaste granne. Se själv: teoretiskt, med ett bikubiskt filter och en 3-faldig reduktion, är förhållandet mellan bearbetade pixlar och de ursprungliga 4² / 3² = 1,78. I praktiken är resultatet mycket sämre. i befintliga implementeringar skalas inte filterfönstret och interpolationsfunktionen enligt bildskalan, och pixlar närmare fönstrets kant tas med negativa koefficienter (enligt funktionen), d.v.s. ger inte ett användbart bidrag till den slutliga bilden. Som ett resultat av detta skiljer sig en bild förminskad med ett bikubiskt filter från en bild förminskad med ett bilinjärt filter endast genom att den är ännu skarpare. Tja, för ett bilinjärt filter och en trefaldig reduktion är förhållandet mellan bearbetade pixlar och de ursprungliga 2² / 3² = 0,44, vilket inte skiljer sig fundamentalt från närmaste granne. Faktum är att affina transformationer inte kan användas för att reducera mer än en faktor 2. Och även när de reduceras till två gånger ger de märkbara stegeffekter för linjer.
Teoretiskt sett borde det finnas implementeringar av exakt affina transformationer som skalar filterfönstret och själva filtret i enlighet med de givna distorsionerna, men jag har inte sett sådana i populära bibliotek med öppen källkod.
1920x1280 → 330x220 = 6,13 ms
1920x1280 → 1067x667 = 17,7 ms
1920x1280 → 4800x3200 = 869 ms
Körtiden är märkbart längre än den för närmaste granne, och beror på storleken på den slutliga bilden och fönsterstorleken för det valda filtret. Det beror nästan inte på cachemissar, eftersom källpixlar används minst två och en.
Min ödmjuka åsikt är att det är helt enkelt att använda denna metod för att godtyckligt reducera bilder är en bugg, eftersom resultatet är mycket dåligt och ser ut som en närmaste granne, och denna metod kräver mycket mer resurser. Den här metoden har dock fått bred tillämpning i program och bibliotek. Det mest överraskande är att denna metod används i alla webbläsare för dukens drawImage()-metod (illustrerande exempel), även om snyggare metoder används för att helt enkelt visa bilder i ett element (förutom IE, som använder affina transformationer för båda fallen). Dessutom används en sådan metod i OpenCV, den nuvarande versionen av Pillow Python-biblioteket (jag hoppas kunna skriva om detta separat), i Paint.NET.
Dessutom är det denna metod som grafikkort använder för att rendera 3D-scener. Men skillnaden är att grafikkort förbereder en uppsättning reducerade versioner (mip-nivåer) för varje textur i förväg, och för den slutliga renderingen väljs en nivå med en sådan upplösning att texturreduktionen inte är mer än två gånger. Dessutom, för att eliminera ett skarpt hopp när du ändrar mip-nivån (när det strukturerade objektet närmar sig eller flyttar sig bort), används linjär interpolation mellan intilliggande mip-nivåer (detta är redan trilinjär filtrering). För att rita varje pixel i ett 3D-objekt måste du alltså interpolera mellan 2³ pixlar. Detta ger ett resultat som är acceptabelt för en snabbrörlig bild i en tid som är linjär med avseende på den slutliga upplösningen.
Supersampling (Supersampling)
Med hjälp av den här metoden skapas samma mip-nivåer, med hjälp av det (om mycket förenklat) fungerar helskärmskantutjämning i spel. Dess kärna är att dela upp källbilden i ett rutnät av pixlar för destinationen och lägga till alla källpixlar som faller på varje pixel av destinationen i enlighet med området som föll under den slutliga pixeln. När du använder den här metoden för att zooma, finns det exakt en pixel i källbilden för varje pixel i den slutliga bilden. Därför blir resultatet för ökningen lika med närmaste granne.Två underarter av denna metod kan särskiljas: med avrundning av pixelgränser till närmaste heltal av pixlar och utan. I det första fallet blir algoritmen olämplig för att skala mindre än 3 gånger, eftersom en slutpixel kan ha en initial pixel och den intilliggande kan ha fyra (2x2), vilket leder till disproportion på lokal nivå. Samtidigt kan avrundningsalgoritmen uppenbarligen användas i fall där storleken på källbilden är en multipel av storleken på den sista, eller reduktionsskalan är tillräckligt liten (versioner med en upplösning på 330×220 är nästan det samma). Förhållandet mellan de bearbetade pixlarna och de ursprungliga vid avrundning av gränserna är alltid lika med ett.
1920x1280 → 330x220 = 7ms
1920x1280 → 1067x667 = 15ms
1920x1280 → 4800x3200 = 22,5 ms
Subview utan avrundning ger utmärkt kvalitet när den zoomas ut i valfri skala, och inzooming ger en märklig effekt där det mesta av originalpixeln i den slutliga bilden ser enhetlig ut, men det finns en övergång i kanterna. Förhållandet mellan de bearbetade pixlarna och originalet utan att avrunda gränserna kan vara från en till fyra, eftersom varje källpixel bidrar antingen till en slutlig, eller till två angränsande, eller till fyra angränsande pixlar.
1920x1280 → 330x220 = 19ms
1920x1280 → 1067x667 = 45ms
1920x1280 → 4800x3200 = 112ms
Prestandan för denna reduktionsmetod är lägre än den för affina transformationer, eftersom alla pixlar i källbilden är involverade i beräkningen av den slutliga bilden. Den version som avrundas till närmaste gränser är vanligtvis flera gånger snabbare. Det är också möjligt att skapa separata versioner för att skala ett fast antal gånger (t.ex. 2x nedskalning) vilket blir ännu snabbare.
Denna metod används i gdImageCopyResampled()-funktionen i GD-biblioteket som ingår i PHP, tillgängligt i OpenCV (INTER_AREA-flagga), Intel IPP, AMD Framewave. Ungefär samma princip fungerar libjpeg när den öppnar bilder i förminskad form flera gånger. Det senare tillåter många applikationer att öppna förstorade JPEG-bilder flera gånger mindre utan mycket overhead (i praktiken öppnar libjpeg miniatyrbilder till och med något snabbare än fullstora) och sedan använda andra metoder för att ändra storlek till exakta storlekar. Om du till exempel behöver ändra storlek på en 1920x1280 JPEG till 330x220, kan du öppna originalbilden i 480x320 och sedan skala ner den till önskat 330x220.
Varvningar
Denna metod liknar affina transformationer genom att den använder filter, men har inte ett fast fönster, utan ett fönster som är proportionellt mot skalan. Till exempel, om filterfönstrets storlek är 6 och bildstorleken minskas med 2,5 gånger, så deltar (2,5 * 6)² = 225 pixlar i bildandet av varje pixel i den slutliga bilden, vilket är mycket mer än i fallet med supersampling (från 9 till 16). Lyckligtvis kan faltningar beräknas i 2 omgångar, först i en riktning, sedan i den andra, så den algoritmiska komplexiteten för att beräkna varje pixel är inte 225, utan endast (2,5 * 6) * 2 = 30. Bidraget från varje källpixel till den sista pixeln är som tider som bestäms av filtret. Förhållandet mellan de bearbetade pixlarna och de ursprungliga bestäms helt av storleken på filterfönstret och är lika med dess kvadrat. De där. för ett bilinjärt filter kommer detta förhållande att vara 4, för ett bikubiskt filter 16, för Lanczos 36. Algoritmen fungerar bra för att både minska och öka.
1920x1280 → 330x220 = 76ms
1920x1280 → 1067x667 = 160ms
1920x1280 → 4800x3200 = 1540ms
Hastigheten för denna metod beror på alla parametrar: storleken på källbilden, storleken på den slutliga bilden, storleken på filterfönstret.
Detta är metoden implementerad i ImageMagick, GIMP, i den nuvarande versionen av Pillow med ANTIALIAS-flaggan.
En av fördelarna med denna metod är att filter kan ställas in av en separat funktion som inte är knuten på något sätt till implementeringen av metoden. I det här fallet kan funktionen för själva filtret vara ganska komplex utan mycket prestandaförlust, eftersom koefficienterna för alla pixlar i en kolumn och för alla pixlar i en rad endast beaktas en gång. De där. själva filterfunktionen kallas endast (m + n) * w gånger, där m och n är dimensionerna för den slutliga bilden och w är storleken på filterfönstret. Och många av dessa funktioner kan nitas, det skulle finnas en matematisk motivering. I ImageMagick, till exempel, finns det 15 av dem. Här är de mest populära:
Bilinjärt filter (bilinjärt eller triangel i ImageMagick)
Bikubiskt filter (bikubiskt , catrom i ImageMagick)
Lanczos filter (Lanczos)
Det är anmärkningsvärt att vissa filter har zoner med negativa koefficienter (som ett bikubiskt filter eller ett Lanczos-filter). Detta är nödvändigt för att ge övergångarna på den slutliga bilden skärpan som var på originalet.
För att öka eller minska storleken på en bild använder Photoshop interpolationsmetoden. Så, till exempel, när du zoomar in på en bild, skapar Photoshop ytterligare pixlar baserat på värdena för närliggande. Grovt sett, om en pixel är svart och den andra är vit, kommer Photoshop att beräkna medelvärdet och skapa en ny grå pixel. Vissa typer av interpolation är snabba och av dålig kvalitet, andra är mer komplexa, men de ger goda resultat.
Låt oss först gå till huvudmenyn Bild - Bildstorlek (Bild - Bildstorlek) eller Alt+Ctrl+I.
Om du klickar på pilen bredvid parametern Omsampling (omsampling av bild), då visas flera interpolationsalternativ i popup-fönstret:
- Automatisk. Photoshop väljer en omsamplingsmetod baserat på typen av dokument och om det skalas upp eller ned.
- Bevara detaljer (förstoring). När denna metod väljs blir brusreduceringsreglaget tillgängligt för att jämna ut brus när bilden skalas.
- Bevara detaljer 2.0. Denna algoritm ger ett mycket intressant resultat av att förstora bilden. Detaljen blir förstås inte mer detaljerad utan den som utökas ganska mycket utan att tappa tydlighet.
- . En bra metod för att förstora bilder baserat på bikubisk interpolation, designad specifikt för jämnare resultat.
- Bicubic Sharper (reduktion). En bra metod för bildstorleksreduktion är baserad på skärpt bikubisk interpolation. Med den här metoden kan du bevara detaljerna i den omsamplade bilden. Om "Bicubic Downscale"-interpolation gör vissa områden av bilden för skarpa, försök att använda bicubic interpolation.
- Bikubisk (släta gradienter). En långsammare men mer exakt metod baserad på analys av färgvärdena för de omgivande pixlarna. På grund av användningen av mer komplexa beräkningar ger bikubisk interpolation jämnare färgövergångar än interpolering av angränsande pixlar eller bilinjär interpolation.
- Genom angränsande pixlar (hårda kanter) (Närmaste granne (hårda kanter)). En snabb men mindre exakt metod som replikerar pixlarna i en bild. Denna metod bevarar skarpa kanter och ger en reducerad filstorlek i illustrationer som innehåller grova kanter. Den här metoden kan dock skapa ojämna kanter som blir märkbara när du förvränger eller skalar bilden, eller gör många markeringsoperationer.
- Bilinjär (bilinjär). Denna metod lägger till nya pixlar genom att beräkna det genomsnittliga färgvärdet för de omgivande pixlarna. Det ger ett genomsnittligt kvalitetsresultat.
Användningsexempel Bicubic Smoother (förstoring):
Det finns ett foto, mått 600 x 450 pixlar upplösning 72 dpi
Vi måste öka den. Öppnar ett fönster Bildstorlek och välj Bicubic Smoother (förstoring), måttenheter - procent.
Måtten på dokumentet kommer omedelbart att ställas in på 100 %. Därefter kommer vi gradvis att öka bilden. Ändra värdet från 100 % till 110 %. När du ändrar bredden justeras höjden automatiskt.
Nu är dess dimensioner redan 660 x 495 pixlar. Genom att upprepa dessa steg kan goda resultat uppnås. Naturligtvis kommer det att vara ganska svårt för oss att uppnå perfekt klarhet, eftersom bilden var liten och låg upplösning. Men titta på förändringarna i pixlar.
Hur stora kan vi göra foton tack vare interpolationsmetoden? Allt beror på kvaliteten på bilden, hur det togs och i vilket syfte du förstora det. Bästa svaret: ta det och se själv.
Vi ses i nästa lektion!