1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244
| function varargout = Niveaux_couleurs(varargin)
% NIVEAUX_COULEURS MATLAB code for Niveaux_couleurs.fig
% NIVEAUX_COULEURS, by itself, creates a new NIVEAUX_COULEURS or raises the existing
% singleton*.
%
% H = NIVEAUX_COULEURS returns the handle to a new NIVEAUX_COULEURS or the handle to
% the existing singleton*.
%
% NIVEAUX_COULEURS('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in NIVEAUX_COULEURS.M with the given input arguments.
%
% NIVEAUX_COULEURS('Property','Value',...) creates a new NIVEAUX_COULEURS or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Niveaux_couleurs_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Niveaux_couleurs_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Niveaux_couleurs
% Last Modified by GUIDE v2.5 19-May-2015 17:14:45
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Niveaux_couleurs_OpeningFcn, ...
'gui_OutputFcn', @Niveaux_couleurs_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before Niveaux_couleurs is made visible.
function Niveaux_couleurs_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Niveaux_couleurs (see VARARGIN)
% Choose default command line output for Niveaux_couleurs
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes Niveaux_couleurs wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = Niveaux_couleurs_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in Selection_images.
function Selection_images_Callback(hObject, eventdata, handles)
% hObject handle to Selection_images (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
[FileName,PathName] = uigetfile('.\*.txt');
Image = load_txt_single(FileName,PathName);
handles.Image = Image;
guidata(hObject,handles);
function Nbre_niveau_Callback(hObject, eventdata, handles)
% hObject handle to Nbre_niveau (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of Nbre_niveau as text
% str2double(get(hObject,'String')) returns contents of Nbre_niveau as a double
handles.nbre_niveau = str2double(get(hObject,'String')); % Recupération du nombre de niveaux entré par l'utilisateur
guidata(hObject,handles);
% --- Executes during object creation, after setting all properties.
function Nbre_niveau_CreateFcn(hObject, eventdata, handles)
% hObject handle to Nbre_niveau (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in Start.
function Start_Callback(hObject, eventdata, handles)
% hObject handle to Start (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
Image = handles.Image;
nbre_niveau = handles.nbre_niveau;
%% Conversion pour imhist
Image2 = uint8(Image);
[COUNTS2,X2]=imhist(Image2); % COUNTS sert lors de l'initialisation des rectangles
figure
imhist(Image2)
LUT = [0 0 153; % Look Up Table pour les couleurs
0 0 255;
0 128 255;
0 255 255;
0 255 128;
0 255 0;
128 255 0;
255 255 0;
255 128 0;
255 0 0 ];
LUT = LUT./255; % Normalisation [0 - 1]
%% Initialisation des rectangles (Répartis équitablement)
for nn = 1:nbre_niveau
if nn == nbre_niveau
largeur_rect(nn) = 255 - x(nn-1) + largeur_rect(nn-1);
hauteur_rect(nn) = max(COUNTS2(:))/2;
x(nn) = x(nn-1) + largeur_rect(nn-1);
y(nn) = 0;
else
largeur_rect(nn) = round(255/nbre_niveau);
hauteur_rect(nn) = max(COUNTS2(:))/2;
x(nn) = (nn-1)*largeur_rect(nn);
y(nn) = 0;
end
h(nn) = imrect(gca, [x(nn) y(nn) largeur_rect(nn) hauteur_rect(nn)]); % h(nn) représente le rectangle n
setColor(h(nn),LUT(nn,:))
end
handles.h = h;
handles.COUNTS2 = COUNTS2;
guidata(hObject,handles);
% --- Executes on button press in Validation.
function Validation_Callback(hObject, eventdata, handles)
% hObject handle to Validation (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
nbre_niveau = handles.nbre_niveau;
COUNTS2 = handles.COUNTS2;
h = handles.h;
Image = handles.Image;
[H,L] = size(Image);
%% Recalage des intervalles
for nn = 1:nbre_niveau
pos = getPosition(h(nn));
x(nn) = pos(1);
largeur_rect(nn) = pos(3);
if nn == 1 % Si premier rectangle
if x(nn) < 0 % Si bord gauche rectangle hors fenêtre
x(nn) = 0;
end
end
if nn == nbre_niveau % Si dernier rectangle
if x(nn) + largeur_rect(nn) < 255 % Si bord droit hors fenêtre (on affiche un histogramme avec comme axe x = [0 - 255])
largeur_rect(nn) = 255 - x(nn); % On modifie la largeur du rectangle pour qu'elle fit la fenêtre
end
end
if nn ~= 1 % Cas des autres rectangles
if x(nn) ~= x(nn-1) + largeur_rect(nn-1) % Verification que les rectangles ne se recoupent pas
x(nn) = x(nn-1) + largeur_rect(nn-1);
end
if x(nn) + largeur_rect(nn) > 255
largeur_rect(nn) = 255 - x(nn);
end
end
delete(h(nn)) % On efface les rectangles
h(nn) = imrect(gca, [x(nn) 0 largeur_rect(nn) max(COUNTS2(:))/2]); % Pour les retracer avec les nouvelles données de positions et taille
setColor(h(nn),LUT(nn,:)) % On recolore les rectangles
pos = getPosition(h(nn)); % pos = [ x y largeur hauteur ]
debut_intervalle(nn) = pos(1); % récupération des valeurs des intervalles
fin_intervalle(nn) = debut_intervalle(nn) + pos(3); %
taille_intervalle(nn) = fin_intervalle(nn) - debut_intervalle(nn);
end
passage = 1;
Image2 = zeros(H,L);
Fait = zeros(H,L);
for kk = 1:nbre_niveau % Algorithme de traitement des données à partir des valeurs d'intervalles
for ii = 1:H
for jj = 1:L
if (Image(ii,jj) <= fin_intervalle(kk) && Image(ii,jj) >= debut_intervalle(kk) && Fait(ii,jj) == 0 )
Image2(ii,jj) = debut_intervalle(kk) + taille_intervalle(kk)/2;
Fait(ii,jj) = 1;
end
end
end
passage = passage +1;
end
figure; % Affichage du traitement
imagesc(Image2);
title(strcat('Image avec ',num2str(nbre_niveau),' niveaux'))
colorbar
% --- Executes on button press in Enregistrement.
function Enregistrement_Callback(hObject, eventdata, handles)
% hObject handle to Enregistrement (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA) |
Partager