Aankondiging

Collapse
No announcement yet.

Automatische Cropping na Inscannen

Collapse
Deze discussie is gesloten.
X
X
 
  • Weergaveopties
  • Begin
Clear All
new posts

  • Automatische Cropping na Inscannen

    Dag allemaal,

    Ben bezig met oudere foto reeksen allemaal in te scannen. De twain interface zoekt "automatisch" de randen van de foto op. Spijtig genoeg (of uiteraard) is dat niet perfect. Is er een methode in Photoshop om via een handeling (script) een reeks van dergelijke foto's van een vooropgestelde rand (van bv 5 of 10 pixels) te ontdoen dit boven, onder, links, rechts ? Zijn er andere (betere) methodes om de niet perfecte rand weg te werken ? Uiteraaard mag dit gepaard gaan met verlies van echte (goede of behorend tot de foto) randpixels.

    Veel dank.

  • #2
    PS Elements heeft hiervoor twee functies. De ene roteert de foto alleen (op basis van de waargenomen lijnen in de foto), de tweede doet hetzelfde en cropt ook nog de ontstane ruimte weg.

    Ook deze algoritmes werken niet perfect, dwz niet voor digitale foto's. Het blijft altijd maar de vraag wat zo'n algoritme als hor en vert lijnen beschouwt. In mijn boek over PSE heb ik een voorbeeld gebruikt van een foto van het zoontje van Jakke aan zee. De horizon staat net ietsje scheef. De rotatiefunctie ziet de lijn tussen zee en lucht en roteert de foto correct. De functie die roteert en bijsnijdt, gaat echter de fout in. Deze ziet de lijn tussen lucht en zee als snijlijn en snijdt dus vrolijk de lucht van de foto af. Maar bij gescande foto's die er helemaal opstaan, zijn de lijnen rondom de foto waarschijnlijk de duidelijkste lijnen en zal het meestal toch wel goed gaan.

    Deze functies zitten voor alle duidelijkheid dus wel in Elements (1 en 2), niet in de grote versie van PS.

    Comment


    • #3
      Dank je wel Erik,

      Ik probeerde eens binnen PSE (versie 1) maar dit geeft, zoals je aanhaalt, soms bizarre (en onbruikbare) resultaten. Heb ondertussen gezien dat IMatch 3 een script heeft dat bv 10, 15,... (=userinput) pixels rondom wegknipt. Ik blijf wel uitkijken of dit wegknippen van een "rand rondom" mogelijk is in Photoshop (Full version) via actions ?

      Comment


      • #4
        Met een action in PS zal dat niet direct gaan denk ik. Met een action kun je wel telkens een bepaald aantal graden roteren oid. Maar die 2 rotatie (en crop) functies gebruiken een specifiek beeldherkenningsalgoritme (de software moet nl zoeken naar rechte lijnen en dan liefst die waar niets meer buiten ligt). Deze functie moet in de software aanwezig zijn om te kunnen aanroepen met een action.

        Aangezien dat in PS niet het geval is, kun je die ook niet met een action aanroepen. Want een action is niet meer dan een aantal mogelijkheden die het pakket zelf al heeft snel achter elkaar toegepast (een soort macro dus, géén extra functionaliteit, maar gewoon snel automatisch achter elkaar uitvoeren). Je hebt voor het zoeken van die lijnen extra functies nodig.

        Je zou het dus niet moeten zoeken in een action voor PS maar een plug-in voor PS (want die kan dus wel extra functionaliteit toevoegen). Ik ken er zelf echter geen die dit doet voor PS.

        Comment


        • #5
          Heb ondertussen:
          - Photo Shop 7 Scripting geïnstalleerd
          - Via een script kan er een randje rondom worden weggeknipt:
          - Hoe:
          1. Open in PS 7 een document
          2. In de VBA editor van Word bv de code hieronder vermeld inserten
          3. In de VBA editor bij Tools-References een referentie naar de PS 7 Object library maken.

          Nogal omslachtig, spijtig dat PS 7 zelf geen VB script editor heeft, of ik keek er tot nog toe over ? Deze scripting opent wel vele mogelijkheden.

          '***START CODE:
          Sub main()
          Dim appRef As New Photoshop.Application
          Dim docRef As Photoshop.Document
          Dim originalRulerUnits As Photoshop.PsUnits
          Dim mymax As Double
          originalRulerUnits = appRef.Preferences.RulerUnits
          Set docRef = appRef.Documents(1)
          Debug.Print docRef.Width
          Debug.Print docRef.Height
          Debug.Print docRef.Resolution
          Debug.Print originalRulerUnits
          ' pscm = 3 !
          If docRef.Height <= docRef.Width Then
          mymax = docRef.Height / 4
          Else
          mymax = docRef.Width / 4
          End If
          With docRef
          Myval = Val(InputBox("Document is " & .Width & " * " & .Height & ". Crop Width ?"))
          If Myval > mymax Then
          MsgBox "Invalid Input, No cropping will be done."
          Else
          docRef.crop Array(Myval, Myval, docRef.Width - Myval, docRef.Height - Myval)
          End If
          End With
          End Sub
          '***END CODE

          Comment

          Working...
          X