Napraw uszkodzone pliki jpg

11

Cześć, jestem pewien, że zadawano wiele podobnych pytań, ale po wielu poszukiwaniach nie znalazłem żadnego postu opisującego moją sytuację.

Mam kilka plików jpg, które po pewnym momencie mają nieprawidłowe kolory, a także każdy piksel jest przesuwany w lewo. Myślę, że dzieje się tak z powodu niektórych brakujących bajtów w punkcie, w którym się zmienia. Próbowałem edytować plik za pomocą vi, ale wydaje się niemożliwe ustalenie, gdzie są brakujące bajty, a także vi jest bardzo skomplikowany w użyciu. Próbowałem także nano, ale nie jest to bezpieczne binarnie.

To jest jeden z omawianych obrazów:

wprowadź opis zdjęcia tutaj

Więc chcę zadać ci dwa pytania:

  1. Jak mogę naprawić takie obrazy w systemie Linux?
  2. Jak mogę bezpiecznie otworzyć i edytować plik w binarnym edytorze tekstów pod Linuksem?

Edycja: używając hexedit odkryłem, że od pozycji 0x27F000 do 0x27F403 są tylko te 0xff, a od 0x27F404 do 0x27FFFF są tylko zera 0x00. To sprawia, że ​​coś takiego:

    0027EFF0   F8 83 C3 E2  09 35 AF 13  44 6E C5 FD  C7 EF 23 E8  .....5..Dn....#.
    0027F000   FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF  ................
    [...]
    0027F400   FF FF FF FF  00 00 00 00  00 00 00 00  00 00 00 00  ................
    [...]
    0027FFF0   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
    00280000   8F 39 6E 47  4F 43 5F 36  7C 73 66 F1  0D AE AD AF  .9nGOC_6|sf.....

Zmieniając te bajty losowymi liczbami udało mi się cofnąć przesunięcie obrazu, ale nadal występuje problem z kolorem.

Czy ktoś mógłby wskazać mi trochę dokumentacji na temat kodowania JPEG, żebym mógł dowiedzieć się, gdzie kończy się blok 8x8.

Zastanawiam się, dlaczego pozycje są tak precyzyjne (0x27F000 do 0x27FFFF), czy może to być błąd mojej kamery lub karty pamięci, której użyłem?

Falk
źródło
Zdarzyło mi się to raz w przypadku dużego zestawu obrazów. Właśnie je usunąłem, naprawdę szkoda. Chciałbym wiedzieć, czy uda Ci się je naprawić, masz przed sobą ciężką pracę.
dtmland
Tak, szkoda, próbuję dowiedzieć się, jak te pliki JPEG są kodowane, to tylko jedna linia 8x4000px, którą będę musiał usunąć. W tym pliku jest dokładnie 4KB uszkodzony w pliku 4,4 MB To mniej niż 0,1% !!!
Falk

Odpowiedzi:

2

Artykuł w Wikipedii na http://en.wikipedia.org/wiki/JPEG#Entropy_coding zawiera wiele informacji - najbardziej odpowiedni dla twojego obecnego problemu jest ten:

Poprzedni skwantowany współczynnik DC służy do przewidywania aktualnego skwantowanego współczynnika DC. Różnica między nimi jest zakodowana, a nie rzeczywista. Kodowanie 63 skwantowanych współczynników AC nie wykorzystuje takiego różnicowania predykcyjnego.

Przesunięcie kolorów w pozostałej części obrazu jest spowodowane pojedynczym złym współczynnikiem DC, który spada kaskadowo do całej reszty. Być może będziesz w stanie znaleźć mały obszar (może jeden bajt, może dwa - to prawdopodobnie pewna sekwencja bitów), który niezawodnie wpływa na kolory i wypróbować dużą liczbę różnych wartości.

Łatwiej może być po prostu naprawić obraz w edytorze graficznym - wygląda na to, że ten, który opublikowałeś, inny niż przesunięcie (i zawijanie), może po prostu mieć niższą jasność, możesz wybrać obszar i użyć narzędzia Poziomy. W przypadku innych, które wiążą się z większymi przesunięciami kolorów, możesz uzyskać dobry wynik, patrząc na rozkład kanałów kolorów (pliki JPG mogą być w RGB lub Y'CbCr) i ustalając każdy kanał osobno, ewentualnie zamieniając kanały.

EDYCJA: Ups, nie widziałem, ile lat ma twoje pytanie. Cóż, może będzie to przydatne tobie lub komuś innemu.

Losowo 832
źródło
Wielkie dzięki, nie przejmuj się wiekiem pytania, wciąż masz obraz i jeszcze więcej.
Falk
Myślę, że szkoda, że ​​aparat nie spodziewał się takiej sytuacji, powinni wstawiać kilka bloków klawiszy co n (powiedzmy 32) rzędów bloków. drugim problemem jest to, że nawet nie wiem, czy po stratnym zastosowano kompresję bezstratną, jak Huffman. Wolę bawić się kilkoma bajtami niż otwierać obraz za pomocą edytorów graficznych: po pierwsze większość z nich nie chce otwierać tych obrazów, po drugie nie sądzę, żebym mógł znaleźć dokładną korektę za pomocą niektórych suwaków. @ Random832 dzięki i proszę powiedz mi, jeśli wiesz coś więcej.
Falk
1

2) Jak mogę bezpiecznie otworzyć i edytować plik w binarnym edytorze tekstu w systemie Linux?

Wiele świetnych edytorów binarnych można znaleźć tutaj: /programming/839227/how-to-edit-binary-file-on-the-unix-systems

Moimi osobistymi ulubionymi są vim z:%! Xxd hack i hexedit

Wiaczesław Rodionow
źródło
2
Ok i coś łatwiejszego w użyciu? jak nano.
Falk
coś łatwego jak shed?
Attie
0

Próbowałeś photorec? Możesz zainstalować go na Ubuntu w następujący sposób:

sudo apt-get install testdisk

Sprawdź instrukcję za pomocą:

man photorec

i po prostu uruchom photorecz terminala tak:

photorec

Zostaniesz poproszony o wybranie źródła i celu oraz próby automatycznego odzyskania plików jpg.

Aby zapobiec uszkodzeniu oryginału, zalecam wykonanie kopii za pomocą ddpolecenia. Powodzenia!

Vincent Gerris
źródło
1
Cześć, photorec jest przeznaczony do odzyskiwania plików z uszkodzonego systemu plików, w moim przypadku system plików jest w porządku, ale obraz jest uszkodzony, więc jest to zupełnie inna sytuacja.
Falk
3
Cześć, jak napisałem wcześniej, nie ma nic złego w systemie plików, to plik JPEG ma błąd, i tak dzięki.
Falk,
1
Wiem, jak działa photorec, i to nie jest to, czego potrzebuję, po prostu skopiowałoby to zdjęcie bez naprawy.
Falk
1
Próbuję tylko pomóc. Wpisujesz, więc nie próbowałeś? Właściwie uruchomiłem go na karcie SD i tak, kopiuje je, ale też je naprawia. Nie możesz zaszkodzić, prawda? Jeśli nie warto próbować, dobrze, powodzenia. Mówię tylko, że naprawiło to dla mnie. Nie będę odpowiadać dalej, aby uniknąć niekończących się dyskusji.
Vincent Gerris
1
Nie spróbuję tego, ponieważ fotografię można uruchamiać z urządzeniem jako parametrem, plik jpg, który mam, znajduje się na dysku twardym, co jest w porządku. To tylko inny rodzaj sytuacji. Tak jak powiedziałem dzięki.
Falk
-1

Właśnie użyłem Photorec do odzyskania zdjęć z uszkodzonej karty SD. Chociaż nie odzyskał wszystkich plików, wykonał świetną robotę, odzyskując dużą liczbę z nich. To powiedziawszy, filmy MP4 zostały odzyskane, ale nie można ich otworzyć. Niektóre pliki JPEG zostały odzyskane, ale nie można ich było wyświetlić lub zostały naprawdę pomieszane, tak jak w przykładzie podanym na początku tego wątku. Photorec ich nie naprawił.

Konkluzja: Photorec jest zaprojektowany do odzyskiwania utraconych plików z uszkodzonych SYSTEMÓW PLIKÓW, ale najwyraźniej nie robi nic, aby odzyskać zawartość uszkodzonych PLIKÓW.

Wander Stabenow
źródło
Cześć Wander, znam fotoreportaż, ale nie tego szukam. Nie naprawi uszkodzonych plików.
Falk