def three_seven(): """ 3.7 Obtain the unnormalized and the normalized histograms of the following 8-bit, MxN image. Give your histogram either in a table or a graph, labeling clearly the value and location of each histogram component in terms of M and N. Double-check your answer by making sure that the histogram components add to the correct value. """ figure_image = np.array([ [240, 240, 240, 16, 16, 16, 32, 32, 32, 32, 32, 32, 32], [240, 240, 240, 16, 16, 16, 228, 32, 32, 32, 32, 32, 255], [240, 240, 240, 16, 16, 16, 228, 228, 32, 32, 32, 255, 255], [240, 240, 240, 16, 16, 16, 228, 228, 228, 32, 255, 255, 255], [240, 240, 240, 16, 16, 16, 228, 228, 228, 0, 255, 255, 255], [240, 240, 240, 16, 16, 16, 228, 228, 0, 0, 0, 255, 255], [240, 240, 240, 16, 16, 16, 228, 0, 0, 0, 0, 0, 255], [240, 240, 240, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0], [127, 127, 127, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0], [127, 127, 127, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0], [127, 127, 127, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0], ]) rows, columns = figure_image.shape ImageDisplay.display_image(figure_image) histogram = ImageStatistics.calculate_histogram(figure_image) # calculate normalized histogram counts = 0 for value in histogram: counts += value normalized_histogram = histogram / (rows * columns) print(histogram) plt.hist(figure_image) plt.show() plt.plot(histogram, label="unnormalized histogram") plt.legend() plt.show() plt.plot(normalized_histogram, label="normalized histogram") plt.legend() plt.show()
def __preprocess_file(self,fd): if self._image_processor == None: self._image_processor = ProcessImage(fd) else: self._image_processor._set_image(fd) self._image_processor._calc_histogram_rgb(self._image_processor._get_rgb_image()) histogram_rgb = self._image_processor._get_histogram_rgb() if self._image_statistics == None: self._image_statistics = ImageStatistics(histogram_rgb) else: self._image_statistics._set_histogram(histogram_rgb) mean_rgb = self._image_statistics._get_mean() variance_rgb = self._image_statistics._get_variance(mean_rgb) dft_histogram = self._image_processor._get_fourier_transformation() self._image_statistics._set_histogram(dft_histogram) mean_dft = self._image_statistics._get_mean() variance_dft = self._image_statistics._get_variance(mean_dft) desviation_dft = self._image_statistics._get_standard_desviation(variance_dft) skewness_dft = self._image_statistics._get_skewness(mean_dft,desviation_dft) curtosis_dft = self._image_statistics._get_curtosis(mean_dft,desviation_dft) energy_dft = self._image_processor._get_fourier_energy() mean_difference = self._image_processor._get_histogram_dft_mean_difference() feature_vector = self._image_processor._get_feature_vector(mean_rgb,variance_rgb,mean_dft,variance_dft,skewness_dft,curtosis_dft,energy_dft,mean_difference) feature_vector = self._image_processor._feature_scaling(feature_vector) return feature_vector
class StegoDetect: def __init__(self,train_hidden_path=None,train_no_hidden_path=None,test_path=None,dest_data_path=None,dest_classes_path=None,process=None): self._config = Config(train_hidden_path,train_no_hidden_path,test_path,dest_data_path,dest_classes_path,process) self._image_processor = None self._image_statistics = None self._classificator = MachineLearning() def _make_process(self): if self._config._get_process()==0: self.__preprocess_corpus() else: self.__detect_message() def __preprocess_corpus(self): f_data = open(self._config._get_dest_data_path(),"w") f_classes = open(self._config._get_dest_classes_path(),"w") for fd in listdir(self._config._get_train_hidden_path()): print fd dump(self.__preprocess_file(self._config._get_train_hidden_path()+fd),f_data) dump(1,f_classes) for fd in listdir(self._config._get_train_no_hidden_path()): print fd dump(self.__preprocess_file(self._config._get_train_no_hidden_path()+fd),f_data) dump(0,f_classes) f_data.close() f_classes.close() def __preprocess_file(self,fd): if self._image_processor == None: self._image_processor = ProcessImage(fd) else: self._image_processor._set_image(fd) self._image_processor._calc_histogram_rgb(self._image_processor._get_rgb_image()) histogram_rgb = self._image_processor._get_histogram_rgb() if self._image_statistics == None: self._image_statistics = ImageStatistics(histogram_rgb) else: self._image_statistics._set_histogram(histogram_rgb) mean_rgb = self._image_statistics._get_mean() variance_rgb = self._image_statistics._get_variance(mean_rgb) dft_histogram = self._image_processor._get_fourier_transformation() self._image_statistics._set_histogram(dft_histogram) mean_dft = self._image_statistics._get_mean() variance_dft = self._image_statistics._get_variance(mean_dft) desviation_dft = self._image_statistics._get_standard_desviation(variance_dft) skewness_dft = self._image_statistics._get_skewness(mean_dft,desviation_dft) curtosis_dft = self._image_statistics._get_curtosis(mean_dft,desviation_dft) energy_dft = self._image_processor._get_fourier_energy() mean_difference = self._image_processor._get_histogram_dft_mean_difference() feature_vector = self._image_processor._get_feature_vector(mean_rgb,variance_rgb,mean_dft,variance_dft,skewness_dft,curtosis_dft,energy_dft,mean_difference) feature_vector = self._image_processor._feature_scaling(feature_vector) return feature_vector def __unpickle(self,fd): res = [] while 1: try: res.append(load(fd)) except EOFError: break return res def __detect_message(self): f_data = open(self._config._get_dest_data_path(),"rb") f_classes = open(self._config._get_dest_classes_path(),"rb") features = self.__unpickle(f_data) classes = self.__unpickle(f_classes) f_data.close() f_classes.close() ## Train ml # self._classificator._train(features,classes) features = [] for fd in listdir(self._config._get_test_path()): res = self._classificator._test(self.__preprocess_file(self._config._get_test_path()+fd)) if res==[1]: print "File",fd,"has a hidden message" else: print "File",fd,"has not got any hidden message"