Et lite spørsmål til deg siden du ser ut til å en del kunnskap om dette:
Hvis man sammenligner pixel for pixel, og alle pixlene har en så liten forskjell at den blir tilnærmet null. Så sier vi videre at den bittelille differansen som er, alltid går i samme retning. Vil det da kunne være en forskjell i den virkelige verden som programmet ikke har oppdaget pga at det har satt hver pixelforskjell til null?
Eller vil programmet uansett legge differansen inn i en tabell el minne og registrere en forskjell i sluttsum?
Var dette forståelig?
Ikke helt.
Forenklet så består en digital bildefil som .bmp (i tillegg til headere og annet rart) av en matrise. Denne matrisa kan f.eks bestå av :
Kode:
Rød(1,1) blå(1,1) grønn(1,1) Rød(1,2) blå(1,2) grønn(1,2) ......
Rød(2,1) blå(2,1) grønn(2,1)
....
Altså vil et bilde på 100x100 pixel bestå av en matrise på 300x100 elementer. Vanligvis brukes 8 bit pr farge, og siden PC-prosessorer liker å jobbe med 32-bit i gangen så brukes gjerne 32bit pr pixel (i stedetfor 24 som ville ha vært nok), hvor de siste 8 bitene brukes til noe annet.
Dermed får vi at et ukomprimert fullfarge bilde på 100x100 pixler tar opp enten 100x100x24 eller 100x100x32 bit. Når vi legger til headerinformasjon så øker dette tallet noe.
På harddisken så lagres disse verdiene som magnetisk informasjon tilsvarende kassetter. Siden verden er analog, så vil disse verdiene være utsatt for støy og variasjon, og "oversmitting" fra bit til bit. For å motvirke dette så finnes feilkorreksjon som i praksis lagrer hver bit flere forskjellige plasser. Dermed kan man først lese en bit og tolke denne som "1"eller "0" (allerede her skiller man seg fra kassetter fordi man enten leser feil eller ikke feil). Deretter kan man sammenligne denne verdien med andre leste verdier for å finne ut om verdien er sannsynlig.
Ved å bruke veldig mye feilkorrigerende kode kan man maskere store problemer med støy. Samtidig koster dette lagringsplass og prosesseringskraft. Myten om dataene blir "dårligere" av å komme fra en korreksjonskrets skyldes nok et lavt utdaningsnivå i hifi-kretser.
Når bildet så leses fra disk over en IDE-buss vha DMA direkte til minnet så går vi igjennom en rekke høyhastighets busser. Minnen er også "analogt" ved at det består av en rekke små "kondensatorer" som kan holde en verdi en kort stund, før den må "lese" og oppfriskes for ikke å miste verdien. Så lenge mekanismen fungerer bra så greier vi fremdeles å tolke verdien som "1" eller "0". Hvis mekanismen fungerte dårlig så ville selve koden som operativsystemet (Windows) og programmer bli korrupt, og maskinen ville krasje nesten umiddelbart. Nå vil jo mange hevde at Windows krasjer ofte uansett, men undersøkelser viser at dette veldig skjelden skyldes hardware-feil (så som korrupte bit).
Når programmet mitt (MATLAB) beregner forskjellen på de to bildene så leser den disse typisk fra vanlig ram etter at de er lastet fra disk. Prosessoren må laste en eller flere pixler inn i et veldig raskt og lite lokal-minne, registeret, hvor instruksjonene mine kan utføres. Det jeg gjorde var å ta differansen mellom bilde#1 rød (pixel i) og bilde#2 rød (pixel i), og lagre differansen i en ny matris. Denne operasjonen gjøres for hver eneste pixel. Dermed sitter jeg med en matrise med differanser, og jeg bruker en rutine i MATLAB som søker etter elementer ulik 0. Hvis disse to bildene skiller seg på noen måte så må differansen være ulik null.
For å ta tak i spørsmålet ditt om "små forskjeller". Bildene har bare informasjon tilsvarende 8 bit (256 nivåer) pr primærfarge. Selv om de fysiske komponentene som filen befinner seg på (harddisker, minne etc) alltid vil ha unøyaktigheter som gjør at en "1" og en "1" ikke er helt lik på "mikroskop-nivå", så er hele forutsetningen for digitalteknikk at dette er verdier vi ser bort ifra. Det er støy. Så lenge vi greier å tolke begge bildene feilfritt, så er det tilstrekkelig å sammenligne de 8 bit-ene. Dersom det er støy/feil som forårsaker bit-feil så vil det uansett gjøre at differansen blir ulik null. Når differansen blir lik null så betyr det mest sannsynlig at vi kan lese av begge bildene feilfritt.
Dette er et generelt spørsmål og ikke spesifikt til noen av trådens eksempler. Vil bare øke min kunnskap og forståelse.
Det er ved å spørre og stille spørsmålstegn at man lærer
Jeg tror fortsatt at det kan lages nøyaktige kopier, men jeg tror ikke alle digitale kopier er nøyaktige av den grunn.
Mennesket gjør feil og det vil alltid være bugs i software og hardware, og feilkorreksjon kan som regel bare redusere feilsannsynligheten, ikke eliminere den.
Derfor benytter da også kritiske appliikasjoner som servere annen hardware som minne og harddisker med større beskyttelse mot feil.
Men da snakker vi om den ene feilen som skjer en gang pr 10^12 eller 10^15 bit.
-k