#! /usr/bin/make
#
# Javier Redolfi
# jaarac@sluc.org.ar

OCTAVE=octave --silent 
NOISE_IMG=img/$(IMG_STR)Noise.$(IMG_EXT)
ORIG_IMG=img/$(IMG_STR)Orig.$(IMG_EXT)
NOISE=0.05

IMG_EXT=png

IMG_STR=house
IMG_IN=img/$(IMG_STR)Noise.$(IMG_EXT)
IMG_OUT=img/$(IMG_STR)Edge.$(IMG_EXT)
IMG_CANNY=img/$(IMG_STR)Canny.$(IMG_EXT)
IMG_SOBEL=img/$(IMG_STR)Sobel.$(IMG_EXT)

GAMMA_RANGE = 1000 100 10 1
GAMMA_REG_RANGE = 1000
#from 100
COST_RANGE = 1000 100 10 1
COST_REG_RANGE = 1
#from 0.9
THR_RANGE = 0.9 0.925 0.95 0.975 1.0 1.025 1.05
#GAMMA_RANGE = 1
#COST_RANGE = 1000
#THR_RANGE = 0.6

all:
	make regression
	make edge

REG_GAMMA=1
REG_COST=1000
REG_MODEL=models/regression_$(REG_GAMMA)_$(REG_COST).model
EDGE_GAMMA=1
EDGE_COST=1000
EDGE_THR=1.0
EDGE_MODEL=models/edge_$(EDGE_GAMMA)_$(EDGE_COST).model
pipeline:
	make regression GAMMA_RANGE=$(REG_GAMMA) COST_RANGE=$(REG_COST)
	make edge GAMMA_RANGE=$(EDGE_GAMMA) COST_RANGE=$(EDGE_COST) THR_RANGE=$(EDGE_THR)
	make $(NOISE_IMG)
	make $(IMG_OUT)
	make $(IMG_CANNY)
	make $(IMG_SOBEL)

$(IMG_OUT): $(IMG_IN)
	$(OCTAVE) regPredict.m '$(IMG_IN)' '$(REG_MODEL)' 'img/tmp.$(IMG_EXT)'
	$(OCTAVE) edgePredict.m 'img/tmp.$(IMG_EXT)' '$(EDGE_MODEL)' 'img/tmp.txt'
	$(OCTAVE) thrData.m '$@' 'img/tmp.txt' '$(EDGE_THR)'
	#rm -f img/tmp.$(IMG_EXT) img/tmp.txt

$(IMG_CANNY): $(IMG_IN)
	$(OCTAVE) edgeOctave.m '$(IMG_IN)' '$@' 'Canny'

$(IMG_SOBEL): $(IMG_IN)
	$(OCTAVE) edgeOctave.m '$(IMG_IN)' '$@' 'Sobel'

regression:
	make $(REG_LABELS)
	for gamma in $(GAMMA_REG_RANGE); do \
		for cost in $(COST_REG_RANGE); do \
			make models/regression_$${gamma}_$${cost}.model GAMMA=$${gamma} COST=$${cost}; \
		done; \
	done

regression_test:
	make $(NOISE_IMG)
	for gamma in $(GAMMA_RANGE); do \
		for cost in $(COST_RANGE); do \
			make results/noise_$${gamma}_$${cost}.$(IMG_EXT) GAMMA=$${gamma} COST=$${cost}; \
		done; \
	done

data/regTrainLabels.txt:
	mkdir -p data
	$(OCTAVE) regData.m

$(NOISE_IMG): $(ORIG_IMG)
	$(OCTAVE) makeNoise.m '$@' '$<' $(NOISE)

REG_LABELS='data/regTrainLabels.txt'
REG_VECTORS='data/regTrainFeatures.txt'
# regTrain Params: 'labels' 'features' 'gamma' 'cost' 'out_model'
models/regression_$(GAMMA)_$(COST).model:
	mkdir -p models
	$(OCTAVE) regTrain.m $(REG_LABELS) $(REG_VECTORS) $(GAMMA) $(COST) '$@'

results/noise_$(GAMMA)_$(COST).$(IMG_EXT): models/regression_$(GAMMA)_$(COST).model $(NOISE_IMG)
	mkdir -p results
	$(OCTAVE) regPredict.m '$(NOISE_IMG)' '$<' '$@'

edge:
	make data/edgeTrainVectors.txt
	for gamma in $(GAMMA_RANGE); do \
		for cost in $(COST_RANGE); do \
			make models/edge_$${gamma}_$${cost}.model GAMMA=$${gamma} COST=$${cost}; \
			make out/edge_$${gamma}_$${cost}.txt GAMMA=$${gamma} COST=$${cost}; \
			for thr in $(THR_RANGE); do \
				make out/img_edge_$${gamma}_$${cost}_$${thr}.$(IMG_EXT) GAMMA=$${gamma} COST=$${cost} THR=$${thr};\
			done; \
		done; \
	done

data/edgeTrainVectors.txt:
	mkdir -p data
	$(OCTAVE) edgeData.m

models/edge_$(GAMMA)_$(COST).model:
	mkdir -p models
	$(OCTAVE) edgeTrain.m $(GAMMA) $(COST) '$@'

out/edge_$(GAMMA)_$(COST).txt: models/edge_$(GAMMA)_$(COST).model $(ORIG_IMG)
	mkdir -p out
	$(OCTAVE) edgePredict.m '$(ORIG_IMG)' '$<' '$@'

out/img_edge_$(GAMMA)_$(COST)_$(THR).$(IMG_EXT): out/edge_$(GAMMA)_$(COST).txt
	$(OCTAVE) thrData.m '$@' '$<' '$(THR)'

clean:
	rm -rf data/ models/ results/ out/
