-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathcut.py
162 lines (97 loc) · 5.17 KB
/
cut.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
from smop.core import *
import numpy as np
import cv2
import scipy
import math
from scipy import ndimage
@function
def cut(sample,patchsize,overlap,imout,samplepos,imoutpos):
samplesz=size(sample)
sampledms=length(samplesz)
line15junk = sample[samplepos[1] + overlap-1:samplepos[1] + patchsize - 2,samplepos[2] + overlap-1:samplepos[2] + patchsize - 2,:]
imout[imoutpos[0] + overlap-1:imoutpos[0] + patchsize - 2,imoutpos[1] + overlap-1:imoutpos[1] + patchsize - 2,:] = line15junk
imoutsz=size(imout)
imoutdms=length(imoutsz)
samplet=np.zeros((patchsize,overlap))
imoutt=np.zeros((patchsize,overlap))
delta=np.zeros((patchsize,overlap))
if sampledms == 2:
samplet[:,:]=sample[samplepos[1]-1:samplepos[1] + patchsize - 1,samplepos[2]-1:samplepos[2] + overlap - 1]
else:
for k in xrange(0,samplesz[3]):
samplet[:,:]=samplet[:,:] + sample[samplepos[1]-1:samplepos[1] + patchsize - 1,samplepos[2]-1:samplepos[2] + overlap - 1,k]
if imoutdms == 2:
imoutt[:,:]=imout[imoutpos[0]-1:imoutpos[0] + patchsize - 1,imoutpos[1]-1:imoutpos[1] + overlap - 1]
else:
for p in xrange(0,imoutsz[3]):
imoutt[:,:]=imoutt[:,:] + imout[imoutpos[0]:imoutpos[0] + patchsize ,imoutpos[1]:imoutpos[1] + overlap,p]
delta[:,:]=samplet[:,:] - imoutt[:,:]
delta[:,:]=abs(delta[:,:])
ddelta=np.zeros((patchsize,overlap))
ddelta[1,:]=delta[1,:]
for i in xrange(1,patchsize):
for j in xrange(0,overlap):
if j == 1:
ddelta[i,1]=delta[i,0] + numpy.minimum( delta[i - 1,1], delta[i - 1,1])
else:
if j == overlap-1:
ddelta[i,overlap-1]=delta[i,overlap-1] + numpy.minimum(delta[i - 1,overlap - 2],delta[i - 1,overlap-1])
else:
ddelta[i,j]=delta[i,j] + numpy.minimum(numpy.minimum(delta[i - 1,j - 1],delta[i - 1,j]),delta[i - 1,j + 1])
cutarr=np.zeros((patchsize,1))
cutarr[patchsize-1]=find(ddelta[patchsize-1,:] == np.amin(ddelta[patchsize-1,:]),0)
for i in xrange(patchsize-1,0,-1):
if cutarr[i,0] == 1:
temp=matlabarray(ddelta[i - 1,0],ddelta[i - 1,1])
cutarr[i - 1]=find(temp == np.amin(temp),0)
else:
if cutarr[i] == overlap-1:
temp=matlabarray(ddelta[i - 1,overlap-1],ddelta[i - 1,overlap - 2])
cutarr[i - 1]=overlap + 1 - find(temp == np.amin(temp),0)
else:
temp=matlabarray(ddelta[i - 1, int(cutarr[i]) - 3], ddelta[i - 1,int(cutarr[i])-2])
cutarr[i - 1]=cutarr[i] - 2 + find(temp == np.amin(temp),0)
for i in xrange(0,patchsize):
imout[imoutpos[0] + i-1,imoutpos[1] + cutarr[i] - 1:imoutpos[1] + overlap - 1,:]=sample[samplepos[1] + i-1,samplepos[2] + cutarr[i] - 1:samplepos[2] + overlap - 1,:]
samplet=np.zeros((overlap,patchsize))
imoutt=np.zeros((overlap,patchsize))
delta=np.zeros((overlap,patchsize))
if sampledms == 2:
samplet[:,:]=sample[samplepos[1]-1:samplepos[1] + overlap - 1,samplepos[2]-1:samplepos[2] + patchsize - 1]
else:
for k in xrange(0,samplesz[3]):
samplet[:,:]=samplet[:,:] + sample[samplepos[1]-1:samplepos[1] + overlap - 1,samplepos[2]-1:samplepos[2] + patchsize - 1,k]
if imoutdms == 2:
imoutt[:,:]=imout[imoutpos[0]:imoutpos[0] + overlap - 1,imoutpos[1]:imoutpos[1] + patchsize - 1]
else:
for p in xrange(0,imoutsz[3]):
imoutt[:,:]=imoutt[:,:] + imout[imoutpos[0]:imoutpos[0] + overlap ,imoutpos[1]:imoutpos[1] + patchsize,p]
delta[:,:]=samplet[:,:] - imoutt[:,:]
delta[:,:]=abs(delta[:,:])
ddelta=np.zeros((overlap,patchsize))
ddelta[:,1]=delta[:,1]
for i in xrange(1,patchsize):
for j in xrange(0,overlap):
if j == 1:
ddelta[1,i]=delta[1,i] + numpy.minimum(delta[1,i - 1],delta[2,i - 1])
else:
if j == overlap-1:
ddelta[overlap-1,i]=delta[overlap-1,i] + numpy.minimum(delta[overlap - 2,i - 1],delta[overlap-1,i - 1])
else:
ddelta[j,i]=delta[j,i] + numpy.minimum(numpy.minimum(delta[j - 1,i - 1],delta[j,i - 1]),delta[j + 1,i - 1])
cutarr=np.zeros((patchsize,1))
cutarr[patchsize-1]=find(ddelta[:,patchsize-1] == np.amin(ddelta[:,patchsize-1]),0)
for i in xrange(patchsize-1,0,-1):
if cutarr[i] == 1:
temp=matlabarray(ddelta[1,i - 1],ddelta[2,i - 1])
cutarr[i - 1]=find(temp == np.amin(temp),0)
else:
if cutarr[i] == overlap-1:
temp=matlabarray(ddelta[overlap-1,i - 1],ddelta[overlap - 2,i - 1])
cutarr[i - 1]=overlap + 1 - find(temp == np.amin(temp),0)
else:
temp=matlabarray(ddelta[int(cutarr[i]) - 2,i - 1],ddelta[int(cutarr[i])-1,i - 1])
cutarr[i - 1]=cutarr[i] - 2 + find(temp == np.amin(temp),0)
for i in xrange(0,patchsize-1):
imout[imoutpos[0] + cutarr[i] - 1:imoutpos[0] + overlap - 1,imoutpos[1] + i,:]=sample[samplepos[1] + cutarr[i] - 1:samplepos[1] + overlap - 1,samplepos[2] + i,:]
return imout