示例#1
0
	def generate_cr_header(self, in_path, out_path, waves, cbands, lowi, highi):
		
		(keys, key_val) = envi_header_io.read_as_is(in_path)
		
		#subset wavelength
		W = []
		for i in range(lowi, highi+1):
			W.append(waves[i])
		
		#generate wavelength and band names
		wls = "{"		#wavelengths
		bns = "{"		#band names
		
		for w in W:
			wls += str(w) + ",\n"
			bns += str(w) + ",\n"
			
		for i in range(self.n_features):
			if i == self.n_features-1:
				wls += str(waves[len(waves)-1] + 1 + i) + "}\n"
				bns += self.feature_names[i] + "}\n"
			else:
				wls += str(waves[len(waves)-1] + 1 + i) + ",\n"
				bns += self.feature_names[i] + ",\n"
		
		self.writeMessage("subset fwhm")
		
		#subset fwhm
		if 'fwhm' in keys:
			split = key_val['fwhm'].strip('{} \n\t').split(',')
			for i in range(len(split)):
				split[i] = split[i].strip()
			fwhm = "{"
			for i in range(lowi, highi+1):
				fwhm += split[i] + ",\n"
			for i in range(self.n_features):
				if i == self.n_features-1:
					fwhm += "0.0}\n"
				else:
					fwhm += "0.0,\n"
			key_val['fwhm'] = fwhm
			
		#add band names
		if not 'band names' in keys:
			keys.append('band names')
		
		key_val['wavelength'] = wls
		key_val['band names'] = bns
		key_val['bands'] = str(cbands + self.n_features) + "\n" #features appended to bands
		key_val['interleave'] = "bil\n"
		key_val['data type'] = "4\n"
		
		envi_header_io.write_as_is(out_path, keys, key_val)
示例#2
0
	def write_headers(self, keys, keyval, rule_hdr_path, csfy_hdr_path, lib_path):
		
		keep_fields = ["description","samples","lines","bands","header offset","file type","data type","interleave","byte order","band names","x start","y start"]
		remo_fields = []
		
		#
		# removel all fields not in 'keep_fields
		#
		for key in keyval.keys():
			if not( key in keep_fields ):
				remo_fields.append(key)
				
		for key in remo_fields:
			keyval.pop(key)
			keys.remove(key)
			
		
		header = self.get_lib_sample_names(lib_path)
		
		#
		# build 'band names' string
		#
		h_str = "{"
		for i in range(len(header)):
			if i == len(header) - 1:
				h_str = h_str + header[i] + "}\n"
			else:
				h_str = h_str + header[i] + ","
			
		if not( "byte order" in keys ):
			keys.append("byte order")
			
		keyval["byte order"] = "0\n"
		
		if not( "band names" in keys ):
			keys.append("band names")
		
		keyval["band names"] = h_str
		keyval["bands"] = str(len(header)) + "\n"
		keyval["interleave"] = "bsq\n"
		keyval["data type"] = "4\n"
		
		envi_header_io.write_as_is(rule_hdr_path, keys, keyval)
		
		#
		# modify key-value header pairs for classification file
		#
		keyval["bands"] = "1\n"
		keyval["band names"] = "{Classification}\n"
		keyval["data type"] = "12\n"
		
		envi_header_io.write_as_is(csfy_hdr_path, keys, keyval)