|
|
1d7430e |
; Wavelet Decompose Script-Fu
|
|
|
1d7430e |
;
|
|
|
1d7430e |
; Copyright (C) 2009 Christoph A. Traxler
|
|
|
1d7430e |
;
|
|
|
1d7430e |
; This program is free software; you can redistribute it and/or modify it under
|
|
|
1d7430e |
; the terms of the GNU General Public License as published by the Free Software
|
|
|
1d7430e |
; Foundation; either version 3 of the License, or (at your option) any later
|
|
|
1d7430e |
; version.
|
|
|
1d7430e |
;
|
|
|
1d7430e |
; This program is distributed in the hope that it will be useful, but WITHOUT
|
|
|
1d7430e |
; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
|
1d7430e |
; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
1d7430e |
;
|
|
|
1d7430e |
; The GNU General Public License can be found at
|
|
|
1d7430e |
; http://www.gnu.org/copyleft/gpl.html
|
|
|
1d7430e |
|
|
|
1d7430e |
|
|
|
1d7430e |
(define (script-fu-wavelet-decompose image
|
|
|
1d7430e |
start
|
|
|
1d7430e |
count
|
|
|
1d7430e |
factor
|
|
|
1d7430e |
increase
|
|
|
1d7430e |
make-copy)
|
|
|
1d7430e |
(let* (
|
|
|
1d7430e |
(work-image 0) ; my working image
|
|
|
1d7430e |
(layer-orig 0) ; original layer
|
|
|
1d7430e |
(layer-resi 0) ; residual layer
|
|
|
1d7430e |
(layer-orig-copy 0) ; copy of original layer
|
|
|
1d7430e |
(layer-resi-copy 0) ; copy of residual layer
|
|
|
1d7430e |
(layer-scale 0) ; layer with current scale
|
|
|
1d7430e |
(layer-scale-copy 0) ; layer with copy of current scale
|
|
|
1d7430e |
(blur-size start) ; current blur size
|
|
|
1d7430e |
(i 1) ; counter (Start with 1)
|
|
|
1d7430e |
)
|
|
|
1d7430e |
|
|
|
1d7430e |
;-- Preparations --
|
|
|
1d7430e |
|
|
|
1d7430e |
; check if I should work on a copy
|
|
|
1d7430e |
(if (= make-copy TRUE)
|
|
|
1d7430e |
(begin
|
|
|
1d7430e |
(set! work-image (car (gimp-image-duplicate image)))
|
|
|
1d7430e |
(gimp-display-new work-image)
|
|
|
1d7430e |
(gimp-image-undo-disable work-image)
|
|
|
1d7430e |
)
|
|
|
1d7430e |
(begin
|
|
|
1d7430e |
(set! work-image image)
|
|
|
1d7430e |
(gimp-image-undo-group-start work-image)
|
|
|
1d7430e |
)
|
|
|
1d7430e |
)
|
|
|
1d7430e |
|
|
|
1d7430e |
; create two layers for Original and Residual
|
|
|
1d7430e |
(set! layer-orig (car(gimp-image-flatten work-image)))
|
|
|
1d7430e |
(gimp-drawable-set-name layer-orig "Original")
|
|
|
1d7430e |
(gimp-image-set-active-layer work-image layer-orig)
|
|
|
1d7430e |
(set! layer-resi (car(gimp-layer-copy layer-orig FALSE)))
|
|
|
1d7430e |
(gimp-image-add-layer work-image layer-resi -1)
|
|
|
1d7430e |
(gimp-drawable-set-name layer-resi "Residual")
|
|
|
1d7430e |
|
|
|
1d7430e |
;-- Decomposing --
|
|
|
1d7430e |
|
|
|
1d7430e |
(while (<= i count)
|
|
|
1d7430e |
; create layer with current scale detail
|
|
|
1d7430e |
(set! layer-orig-copy (car (gimp-layer-copy layer-orig FALSE)))
|
|
|
1d7430e |
(gimp-image-set-active-layer work-image layer-resi)
|
|
|
1d7430e |
(gimp-image-add-layer work-image layer-orig-copy -1)
|
|
|
1d7430e |
(set! layer-resi-copy (car (gimp-layer-copy layer-resi FALSE)))
|
|
|
1d7430e |
(gimp-image-set-active-layer work-image layer-resi)
|
|
|
1d7430e |
(gimp-image-add-layer work-image layer-resi-copy -1)
|
|
|
1d7430e |
(plug-in-gauss-iir RUN-NONINTERACTIVE
|
|
|
1d7430e |
work-image
|
|
|
1d7430e |
layer-orig-copy
|
|
|
1d7430e |
blur-size
|
|
|
1d7430e |
TRUE TRUE)
|
|
|
1d7430e |
(gimp-layer-set-mode layer-orig-copy GRAIN-EXTRACT-MODE)
|
|
|
1d7430e |
(set! layer-scale (car (gimp-image-merge-down
|
|
|
1d7430e |
work-image layer-orig-copy CLIP-TO-IMAGE)))
|
|
|
1d7430e |
(gimp-layer-set-mode layer-scale GRAIN-MERGE-MODE)
|
|
|
1d7430e |
(gimp-drawable-set-name
|
|
|
1d7430e |
layer-scale
|
|
|
1d7430e |
(string-append "Scale " (number->string i)
|
|
|
1d7430e |
" (" (number->string blur-size) " pix)")
|
|
|
1d7430e |
)
|
|
|
1d7430e |
|
|
|
1d7430e |
; update residual
|
|
|
1d7430e |
(set! layer-scale-copy (car (gimp-layer-copy layer-scale FALSE)))
|
|
|
1d7430e |
(gimp-image-set-active-layer work-image layer-resi)
|
|
|
1d7430e |
(gimp-image-add-layer work-image layer-scale-copy -1)
|
|
|
1d7430e |
(gimp-layer-set-mode layer-scale-copy GRAIN-EXTRACT-MODE)
|
|
|
1d7430e |
(set! layer-resi (car (gimp-image-merge-down
|
|
|
1d7430e |
work-image layer-scale-copy CLIP-TO-IMAGE)))
|
|
|
1d7430e |
|
|
|
1d7430e |
; for the loop
|
|
|
1d7430e |
(set! i (+ i 1))
|
|
|
1d7430e |
(set! blur-size (+ (* blur-size factor) increase))
|
|
|
1d7430e |
)
|
|
|
1d7430e |
|
|
|
1d7430e |
;-- Finishing --
|
|
|
1d7430e |
|
|
|
1d7430e |
; bring original layer to top and hide it
|
|
|
1d7430e |
(gimp-image-raise-layer-to-top work-image layer-orig)
|
|
|
1d7430e |
(gimp-drawable-set-visible layer-orig FALSE)
|
|
|
1d7430e |
|
|
|
1d7430e |
; cleanup
|
|
|
1d7430e |
(if (= make-copy TRUE)
|
|
|
1d7430e |
(begin
|
|
|
1d7430e |
(gimp-image-undo-enable work-image)
|
|
|
1d7430e |
(gimp-image-clean-all work-image)
|
|
|
1d7430e |
)
|
|
|
1d7430e |
(begin
|
|
|
1d7430e |
(gimp-image-undo-group-end work-image)
|
|
|
1d7430e |
)
|
|
|
1d7430e |
)
|
|
|
1d7430e |
(gimp-displays-flush)
|
|
|
1d7430e |
|
|
|
1d7430e |
; return
|
|
|
1d7430e |
'(work-image)
|
|
|
1d7430e |
)
|
|
|
1d7430e |
)
|
|
|
1d7430e |
|
|
|
1d7430e |
; register this script in The GIMP
|
|
|
1d7430e |
(script-fu-register
|
|
|
1d7430e |
_"script-fu-wavelet-decompose" ; func name
|
|
|
1d7430e |
_"Wavelet Decompose ..." ; menu label
|
|
|
1d7430e |
"Decomposes an image into layers with different detail scales.\
|
|
|
1d7430e |
This script flattens the original image first an then creates new layers."
|
|
|
1d7430e |
; description
|
|
|
1d7430e |
"Christoph A. Traxler" ; author
|
|
|
1d7430e |
"(C) 2009, Christoph A. Traxler" ; copyright
|
|
|
1d7430e |
"January 2009" ; date created
|
|
|
1d7430e |
"RGB* GRAY*" ; working image type (non indexed Image)
|
|
|
1d7430e |
SF-IMAGE "Image" 0
|
|
|
1d7430e |
SF-ADJUSTMENT _"Minimum Scale (pixels)"
|
|
|
1d7430e |
'(1 1 1000 1 10 0 1)
|
|
|
1d7430e |
SF-ADJUSTMENT _"Scale Count (number of different scales)"
|
|
|
1d7430e |
'(6 1 100 1 10 0 1)
|
|
|
1d7430e |
SF-ADJUSTMENT _"Scale Increase Factor"
|
|
|
1d7430e |
'(2.0 1.0 10 0.1 1 1 1)
|
|
|
1d7430e |
SF-ADJUSTMENT _"Scale Constant Increase (pixels)"
|
|
|
1d7430e |
'(0 0 10000 1 10 0 1)
|
|
|
1d7430e |
SF-TOGGLE _"Work on copy (creates a new image)"
|
|
|
1d7430e |
TRUE
|
|
|
1d7430e |
)
|
|
|
1d7430e |
(script-fu-menu-register "script-fu-wavelet-decompose"
|
|
|
1d7430e |
"<Image>/Image"
|
|
|
1d7430e |
)
|