% Лабораторна робота № 8 Комп'ютеризовані інформаційно-вимірювальні системи % Оцінювання характеристик випадкових процесів та їх вплив на вимірювальну інформацію % Обробляються набір реалізацій випадкового процесу у вигляді % послідовності зображень нерухомого об'єкту вимірювань: % 1. Тестові зображення сформовані шляхом моделювання випадкового процесу; % 2. Реальні зображення отримані від цифрової камери clear all; % --- ПОЧАТКОВІ ДАНІ ДЛЯ ДОСЛІДЖЕНЬ І РОЗРАХУНКІВ --- % Параметри зображень Dir_Im='E:\Lab8\Image\'; % Папка для зберігання початкового набору зображень реальних об'єктів вимірювань FileMask='.bmp'; % Формат файлів з растровими зображеннями M=480; N=640; % Розмір тестових зображень (по верт. та гор.), д.т. N_Planes=3; % Кількість кольорових площин тестового зображення (1 - напівтонове, 3 - кольорове) Ampl_Video=[26 126 226]; % амплітуда відеосигналу в 3 каналах (R, G, B) тестового зображення, д.р. (max=255 д.р.) N_Image=300; % кількість зображень (реалізацій випадкового процесу) Type_Image=1; % Тип зображень: 1 - тестові зображення; 2 - реальні зображення % Параметри випадкового процесу на тестових зображеннях Mean_Noise=0; % Середне значення амплітуди випадкового процесу, д.р. STD_Noise=3; % Середньоквадратичне значення амплітуди випадкового процесу, д.р. PDov=0.95; % довірча ймовірність для розрахунку похибок вимірювань % Параметри статистичної обробки реалізацій випадкового процесу N_Realization=10; % Номер реалізації випадкового процесу для усереднення за координатами (за часом) M_Fixed=200; % Координата "у" точок зображень для усереднення за реалізаціями випадкового процесу N_Fixed=300; % Координата "х" точок зображень для усереднення за реалізаціями випадкового процесу N_Planes_Fixed=2; % Номер кольорової площини зображення для статистичної обробки % --- СТВОРЕННЯ МАСИВУ ДАНИХ ЗОБРАЖЕНЬ "Array_of_Image" З КОРИСНИМ ВІДЕОСИГНАЛОМ ТА "N_Image" РЕАЛІЗАЦІЯМИ ВИПАДКОВОГО ПРОЦЕСУ --- switch Type_Image case 1 % тестові зображення rand('state',0); randn('state',0); % початковий стан генератора випадковиих чисел % Ініціалізація масиву даних зображень "Array_of_Image": % перша розмірність - номер зображення у відеопослідовності (1...N_Image); % друга і третя розмірність - номер рядку і номер стовпця для точки на зображенні (1...M) та (1...N); % четверта розмірність - номер кольорової площини зображення (1...N_Planes) Array_of_Image=zeros(N_Image,M,N,N_Planes); % Ініціалізація масиву даних випадкового процесу "Array_of_Noise": Array_of_Noise=zeros(N_Image,M,N,N_Planes); % Ініціалізація масиву даних корисного відеосигналу "Image_Video": Image_Video=zeros(M,N,N_Planes); % Додавання амплітуди корисного відеосигналу for i_Planes=1:N_Planes Array_of_Image(:,:,:,i_Planes)=Array_of_Image(:,:,:,i_Planes)+Ampl_Video(i_Planes)/255; end; % Додавання некорельованого випадкового процесу Array_of_Image=Array_of_Image+Mean_Noise/255+STD_Noise/255.*randn(N_Image,M,N,N_Planes); case 2 % реальні зображення % Формування переліку файлів в папці "Dir_Im" з реальними зображеннями % формат файлів повинен відповідати "FileMask" ListFileInDir=dir(Dir_Im); NumberOfFileInDir=length(ListFileInDir(:,1)); NumberOfFileToMask=0; ListFileToMask=[]; for i=1:NumberOfFileInDir, if strfind(ListFileInDir(i).name, upper(FileMask))>=1 NumberOfFileToMask=NumberOfFileToMask+1; ListFileToMask(NumberOfFileToMask).name=ListFileInDir(i).name; end; if strfind(ListFileInDir(i).name, lower(FileMask))>=1 NumberOfFileToMask=NumberOfFileToMask+1; ListFileToMask(NumberOfFileToMask).name=ListFileInDir(i).name; end; end; % Результат пошуку файлів: % ListFileToMask - перелік файлів, що відповідають масці для пошуку % NumberOfFileToMask - кількість файлів, що відповідають масці для пошуку % Запис зображень у масив даних "Array_of_Image" % З'ясування розміру та кількості реальних зображень Im_Frame=imread(strcat(Dir_Im,ListFileToMask(1).name)); M=size(Im_Frame,1); N=size(Im_Frame,2); N_Planes=size(Im_Frame,3); if N_Image>NumberOfFileToMask N_Image=NumberOfFileToMask; end; % Ініціалізація масиву даних зображень "Array_of_Image" Array_of_Image=zeros(N_Image,M,N,N_Planes); % Ініціалізація масиву даних випадкового процесу "Array_of_Noise": Array_of_Noise=zeros(N_Image,M,N,N_Planes); % Ініціалізація масиву даних корисного відеосигналу "Image_Video": Image_Video=zeros(M,N,N_Planes); % Запис реальних зображень (корисний відеосигнал+вип. процес) з файлів у масив даних "Array_of_Image" for i_Image=1:N_Image Im_Frame=im2double(imread(strcat(Dir_Im,ListFileToMask(i_Image).name))); Array_of_Image(i_Image,:,:,:)=Im_Frame; end; end; % Type_Image % --- ОБЧИСЛЕННЯ СТАТИСТИЧНИХ ХАРАКТЕРИСТИК ВИПАДКОВОГО ПРОЦЕСУ --- % --- УСЕРЕДНЕННЯ ЗА РЕАЛІЗАЦІЯМИ ВИПАДКОВОГО ПРОЦЕСУ --- % Виділення корисного відеосигналу шляхом усереднення масиву зображень % "Array_of_Image" по точкам з однаковими координатами Image_Video=mean(Array_of_Image); % Виділення випадкового процесу в масив його реалізацій "Array_of_Noise" for i_Image=1:N_Image Array_of_Noise(i_Image,:,:,:)=Array_of_Image(i_Image,:,:,:)-Image_Video; end; % Розрахунок статистичних характеристик випадкового процесу в точці з координатами "M_Fixed,N_Fixed" % Середне значення, дисперсія та середньоквадратичне значення амплітуди, % розраховані для всіх реалізацій випадкового процесу в фіксованій точці % зображення з координатами "M_Fixed,N_Fixed" для всіх кольорових площин Mean_Realizations=mean(reshape(Array_of_Noise(:,M_Fixed,N_Fixed,:),[],1)); Var_Realizations=var(reshape(Array_of_Noise(:,M_Fixed,N_Fixed,:),[],1)); STD_Realizations=std(reshape(Array_of_Noise(:,M_Fixed,N_Fixed,:),[],1)); % Виведення гістограми значень випадкового процесу в точці з координатами "M_Fixed,N_Fixed" figure; histogram(reshape(Array_of_Noise(:,M_Fixed,N_Fixed,:),[],1),10,'Normalization','count'); % --- УСЕРЕДНЕННЯ ОДНІЄЇ РЕАЛІЗАЦІЇ ЗА ПРОСТОРОВИМИ КООРДИНАТАМИ (ЧАСОМ ПРИ ПЕРЕДАЧІ ПО РЯДКАХ ЗА ТЕЛЕВІЗІЙНИМ СТАНДАРТОМ) --- % Середне значення, дисперсія та середньоквадратичне значення амплітуди, % розраховані для однієї реалізації випадкового процесу (одного зображення) % для всіх кольорових площин Mean_Coordinates=mean(reshape(Array_of_Noise(N_Realization,:,:,:),[],1)); Var_Coordinates=var(reshape(Array_of_Noise(N_Realization,:,:,:),[],1)); STD_Coordinates=std(reshape(Array_of_Noise(N_Realization,:,:,:),[],1)); % Виведення гістограми значень випадкового процесу для одного зображення "N_Realization" figure; histogram(reshape(Array_of_Noise(N_Realization,:,:,:),[],1),20,'Normalization','count'); % Автокореляційна функція випадкового процесу в рядку "M_Fixed" одного зображення "N_Realization" для % однієї кольорової площини "N_Planes_Fixed" [Corr_Function_Coordinates, Tau_Coordinates]=xcorr(Array_of_Noise(N_Realization,M_Fixed,:,N_Planes_Fixed)); figure; plot(Tau_Coordinates,squeeze(Corr_Function_Coordinates)); grid on; title('Автокор. функція вип. процесу в рядку зображення');