[GRASS-SVN] r68522 - sandbox/bo/i.segment.gsoc2016/i.segment

svn_grass at osgeo.org svn_grass at osgeo.org
Wed May 25 20:31:39 PDT 2016


Author: hao2309
Date: 2016-05-25 20:31:39 -0700 (Wed, 25 May 2016)
New Revision: 68522

Added:
   sandbox/bo/i.segment.gsoc2016/i.segment/MeanShift_pseudo_yb
Log:
previous pseudo code

Added: sandbox/bo/i.segment.gsoc2016/i.segment/MeanShift_pseudo_yb
===================================================================
--- sandbox/bo/i.segment.gsoc2016/i.segment/MeanShift_pseudo_yb	                        (rev 0)
+++ sandbox/bo/i.segment.gsoc2016/i.segment/MeanShift_pseudo_yb	2016-05-26 03:31:39 UTC (rev 68522)
@@ -0,0 +1,77 @@
+'''
+Module Name:  Meanshift pseudo code
+
+Created on May 24, 2016
+
+ at author: Bo Yang, Moritz Lennert, Markus Metz
+
+GRASS GSoC2016 project, All Rights Reserved
+'''
+
+#==================================================================================
+#               input parameters
+#==================================================================================
+
+NODATA= -3.40282346639e+038
+count = 0
+range_bandwidth = 27103 #temporally set as the mean value of the image. later apply adaptive
+inputRaster= GetParameter(0)
+threshold_factor= float(GetParameter(1))#convergence factor, normally 0.01
+outputSTARFMraster= GetParameter(2)
+windowSize = int(GetParameter(3))
+
+
+#===================================================================================
+#                       input  Raster
+#===================================================================================
+
+
+input_raster=Raster(inputRaster)
+#input image
+
+last_iteration_raster = array([[input_raster[j][i] for i in range(input_raster.shape[1])] for j in range(input_raster.shape[0])])
+# image sotre for last iteration
+
+iteration_indicator_raster = array([[0 for i in range(input_raster.shape[1])] for j in range(input_raster.shape[0])])
+# if this pixel reach convergence, 0 for not, and 1 for convergence
+
+current_iteration_raster = array([[0.0 for i in range(input_raster.shape[1])] for j in range(input_raster.shape[0])])
+#current iteration raster
+
+pixel_number = (input_raster.shape[0]-windowSize) * (input_raster.shape[1]-windowSize)
+#Count how many pixel are convergence
+
+#===================================================================================
+#               gaussian weight difference (S=||B1-A1||)
+#===================================================================================
+
+def Mean_shift_filter(Raster=input_raster, w = windowSize):
+    for j in range(w/2,input_raster.shape[0]-w/2):
+        for i in range(w/2,input_raster.shape[1]-w/2):
+			if iteration_indicator_raster[j][i] == 0: #skip those pixel already get convergence
+				totalWeight=0.0
+				for m in range(w):
+					for n in range(w):
+						totalWeight = totalWeight + math.exp(-0.5*((input_raster[j][i] - last_iteration_raster[j-w/2+m][i-w/2+n])/(range_bandwidth))**2)
+						# pre-calculate the total weight 
+				for m1 in range(w):
+					for n1 in range(w):
+						current_iteration_raster[j][i] = current_iteration_raster[j][i] + input_raster[j-w/2+m1][i-w/2+n1] * (math.exp(-0.5*((input_raster[j][i] - last_iteration_raster[j-w/2+m1][i-w/2+n1])/(range_bandwidth))**2/totalWeight))
+			if abs(current_iteration_raster[j][i] - last_iteration_raster[j][i]) < threshold_factor:
+				iteration_indicator_raster[j][i] = 1
+				count += 1
+				#if the pixel convergence
+
+void main():
+	while (count < pixel_number):
+		Mean_shift_filter()
+	saveRaster()
+
+
+
+
+
+
+
+
+



More information about the grass-commit mailing list