Advertisement
Guest User

Untitled

a guest
May 26th, 2015
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.18 KB | None | 0 0
  1. using Images, Color, FixedPointNumbers, ImageView
  2.  
  3. impath = joinpath(Pkg.dir("TestImages"), "images/lena_gray_512.tif")
  4. img = imread(impath);
  5. mask = copy(img);
  6. mask.data[1:end] = 1;
  7. marks = falses(size(img.data));
  8.  
  9. #view(img)
  10. #view(mask)
  11.  
  12. tol = 0.15
  13.  
  14. function reducelevels(img, nlev)
  15. l1 = 0.0
  16. l2 = 0.0
  17. for n in 1:nlev
  18. l1 = l2
  19. l2 = n/nlev
  20. av = (l1+l2)/2
  21. img[l1 .<= img .<= l2] = av
  22. end
  23. nothing
  24. end
  25.  
  26. function growto(p1, p2, msk, pmsk)
  27. #ret = (abs(p1 - p2) <= tol) || (msk && (avg(pmsk - p2) <= tol))
  28. ret = (p1 >= p2) # || (msk && (pmsk <= p2)) # || (p1 <= (p2-tol)) || (msk && (pmsk <= (p2-tol)))
  29. ret
  30. end
  31.  
  32. function walk(data, mask, marks, x, y)
  33. visited = falses(size(data))
  34. marked = falses(size(data))
  35.  
  36. MX,MY = size(data)
  37. cont = true
  38. ref = data[x, y]
  39. while cont
  40. cont = false
  41. ref = data[x, y]
  42. visited[x,y] = marked[x,y] = true
  43.  
  44. cont2 = true
  45. xS = x
  46. yS = y
  47. for X in (-1, 0, 1)
  48. for Y in (-1, 0, 1)
  49. xX = xS + X
  50. yY = yS + Y
  51.  
  52. ((xX > 0) && (yY > 0) && (xX <= MX) && (yY <= MY)) || continue
  53. visited[xX,yY] && continue
  54.  
  55. visited[xX,yY] = true
  56.  
  57. if growto(data[xX,yY], ref, marks[xX,yY], mask[xX,yY])
  58. #println(" -> growing to $xX,$yY. marked: $(marks[xX,yY])")
  59. #if marks[xX, yY]
  60. # ref = mask[xX,yY]
  61. # cont2 = false
  62. # break
  63. #else
  64. x = xX
  65. y = yY
  66. cont = true
  67. ref = data[xX, yY]
  68. #end
  69. end
  70. end
  71. end
  72. end
  73. mask[marked] = ref
  74. marks[marked] = true
  75. nothing
  76. end
  77.  
  78. #reducelevels(img, 10)
  79. for x in 1:size(img)[1]
  80. for y in 1:size(img)[2]
  81. marks[x,y] || walk(img.data, mask.data, marks, x, y)
  82. end
  83. end
  84.  
  85. view(mask)
  86.  
  87.  
  88. #img = rand(5, 5)
  89. #mask = copy(img)
  90. #mask[1:end] = 1;
  91. #marks = falses(size(img));
  92. #for x in 1:size(img)[1]
  93. # for y in 1:size(img)[2]
  94. # marks[x,y] || walk(img, mask, marks, x, y)
  95. # end
  96. #end
  97. #println(img)
  98. #println(mask)
  99.  
  100.  
  101.  
  102. #function climb(img, x, y)
  103. # data = img.data
  104. # visited = falses(size(data))
  105. #
  106. # maxiter = 512*512
  107. # cont = true
  108. # while cont && (maxiter > 0)
  109. # cont = false
  110. # maxiter -= 1
  111. # ref = data[x, y]
  112. # visited[x,y] = true
  113. #
  114. # for X in (-1, 0, 1)
  115. # for Y in (-1, 0, 1)
  116. # xX = x + X
  117. # yY = y + Y
  118. #
  119. # ((xX > 0) && (yY > 0) && (xX <= 512) && (yY <= 512)) || continue
  120. # visited[xX,yY] && continue
  121. #
  122. # visited[xX,yY] = true
  123. # if data[xX, yY] >= ref
  124. # x = xX
  125. # y = yY
  126. # cont = true
  127. # ref = data[xX, yY]
  128. # end
  129. # end
  130. # end
  131. # end
  132. # (x,y)
  133. #end
  134. #
  135. #function grow(img, mask, x, y)
  136. # data = img.data
  137. # maskdata = mask.data
  138. #
  139. # pipeline = Int[]
  140. # push!(pipeline, x, y)
  141. #
  142. # maxiter = 512*512
  143. #
  144. # while !isempty(pipeline) && (maxiter > 0)
  145. # maxiter -= 1
  146. # x = shift!(pipeline)
  147. # y = shift!(pipeline)
  148. # ref = data[x, y]
  149. # maskdata[x,y] = 0
  150. # println("$x,$y = 0")
  151. #
  152. # for X in (-1, 0, 1)
  153. # for Y in (-1, 0, 1)
  154. # xX = x + X
  155. # yY = y + Y
  156. # ((xX > 0) && (yY > 0) && (xX <= 512) && (yY <= 512)) || continue
  157. # (maskdata[xX, yY] == gray(1)) || continue
  158. # println("checking $xX,$yY... maskdata: $(maskdata[xX, yY])")
  159. # if data[xX, yY] <= ref
  160. # maskdata[xX, yY] = 0
  161. # println("$xX,$yY = 0")
  162. # push!(pipeline, xX, yY)
  163. # #grow(img, mask, xX, yY)
  164. # else
  165. # maskdata[xX, yY] = 0.5
  166. # println("$x,$y = 0.5")
  167. # end
  168. # end
  169. # end
  170. # end
  171. # nothing
  172. #end
  173. #
  174. ##grow(img, mask, beginat[1], beginat[2])
  175. #grow(img, mask, 493, 345)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement