Skip to content

Commit cac5287

Browse files
committed
add RGB to Grayscale conversion
1 parent 71b14c9 commit cac5287

File tree

3 files changed

+93
-24
lines changed

3 files changed

+93
-24
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
classdef ConvertRGBImageToGrayscale < imagem.actions.CurrentImageAction
2+
% One-line description here, please.
3+
%
4+
% Class ConvertRGBImageToGrayscale
5+
%
6+
% Example
7+
% ConvertRGBImageToGrayscale
8+
%
9+
% See also
10+
%
11+
12+
% ------
13+
% Author: David Legland
14+
15+
% Created: 2021-04-08, using Matlab 9.8.0.1323502 (R2020a)
16+
% Copyright 2021 INRAE - BIA-BIBS.
17+
18+
19+
%% Properties
20+
properties
21+
end % end properties
22+
23+
24+
%% Constructor
25+
methods
26+
function obj = ConvertRGBImageToGrayscale(varargin)
27+
% Constructor for ConvertRGBImageToGrayscale class.
28+
29+
end
30+
31+
end % end constructors
32+
33+
34+
%% Methods
35+
methods
36+
function run(obj, frame) %#ok<INUSL,INUSD>
37+
38+
% get handle to current doc
39+
doc = frame.Doc;
40+
41+
% check image type
42+
if ~isColorImage(doc.Image)
43+
errordlg('Requires a Color image', 'Image Format Error');
44+
return;
45+
end
46+
47+
% convert RGB image to grayscale image with uint8 data
48+
res = rgb2gray(doc.Image);
49+
50+
% add new image to application, and create new display
51+
[frame2, doc2] = createImageFrame(frame, res); %#ok<ASGLU>
52+
53+
% add history
54+
string = sprintf('%s = rgb2gray(%s);\n', ...
55+
doc2.Tag, doc.Tag);
56+
addToHistory(frame, string);
57+
end
58+
59+
60+
function b = isActivable(obj, frame) %#ok<INUSL>
61+
doc = frame.Doc;
62+
b = ~isempty(doc) && ~isempty(doc.Image) && isColorImage(doc.Image);
63+
end
64+
65+
end % end methods
66+
67+
end % end classdef
68+

ImageM/+imagem/+actions/+image/ImageConvertType.m

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
classdef ImageConvertType < imagem.actions.CurrentImageAction
2-
% Convert the type (grayscale, label...) of the current image.
1+
classdef ImageConvertType < imagem.actions.ScalarImageAction
2+
% Convert the type (grayscale, label...) of the current (scalar) image.
33
%
44
% Class ImageConvertTypeAction
55
%
@@ -11,7 +11,7 @@
1111

1212
% ------
1313
% Author: David Legland
14-
% e-mail: david.legland@inra.fr
14+
% e-mail: david.legland@inrae.fr
1515
% Created: 2016-01-06, using Matlab 8.6.0.267246 (R2015b)
1616
% Copyright 2016 INRA - BIA-BIBS.
1717

@@ -45,13 +45,13 @@ function run(obj, frame) %#ok<INUSD>
4545
doc = currentDoc(frame);
4646

4747
% apply the conversion operation
48-
res = Image(doc.Image, 'type', obj.TypeName);
48+
res = Image(doc.Image, 'Type', obj.TypeName);
4949

5050
% create a new doc
5151
newDoc = addImageDocument(frame, res);
5252

5353
% add history
54-
string = sprintf('%s = Image(%s, ''type'', ''%s'');\n', ...
54+
string = sprintf('%s = Image(%s, ''Type'', ''%s'');\n', ...
5555
newDoc.Tag, doc.Tag, obj.TypeName);
5656
addToHistory(frame, string);
5757
end

ImageM/+imagem/+gui/FrameMenuBuilder.m

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -132,18 +132,19 @@ function buildImageFrameMenu(obj, hf)
132132
addMenuItem(obj, convertTypeMenu, imagem.actions.image.ImageConvertType('label'), 'Label');
133133

134134
convertMenu = addMenu(obj, imageMenu, 'Convert Data Type');
135-
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertDataType('uint8'), 'UInt8 (Grayscale)');
136-
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertDataType('uint16'), 'UInt16 (Grayscale)');
137-
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertDataType('single'), 'Single (Intensity)');
135+
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertDataType('uint8'), 'UInt8 (Grayscale)');
136+
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertDataType('uint16'), 'UInt16 (Grayscale)');
137+
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertDataType('single'), 'Single (Intensity)');
138138

139139

140140
convertMenu = addMenu(obj, imageMenu, 'Convert', 'Separator', 'on');
141-
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertImage3DToVectorImage(), '3D Image to Vector Image');
142-
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertVectorImageToImage3D(), 'Vector Image to 3D Image');
143-
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertVectorImageToRGB(), 'Vector Image to RGB');
144-
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertScalarImageToRGB(), 'Intensity Image to RGB', 'Separator', 'on');
145-
addMenuItem(obj, convertMenu, imagem.actions.image.UnfoldVectorImage(), 'Unfold Vector Image to Table', 'Separator', 'on');
146-
addMenuItem(obj, convertMenu, imagem.actions.image.UnfoldVectorImageWithMask(), 'Unfold Vector Image Within Mask to Table...');
141+
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertRGBImageToGrayscale(), 'RGB to Grayscale');
142+
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertImage3DToVectorImage(), '3D Image to Vector Image');
143+
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertVectorImageToImage3D(), 'Vector Image to 3D Image');
144+
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertVectorImageToRGB(), 'Vector Image to RGB');
145+
addMenuItem(obj, convertMenu, imagem.actions.image.ConvertScalarImageToRGB(), 'Intensity Image to RGB', 'Separator', 'on');
146+
addMenuItem(obj, convertMenu, imagem.actions.image.UnfoldVectorImage(), 'Unfold Vector Image to Table', 'Separator', 'on');
147+
addMenuItem(obj, convertMenu, imagem.actions.image.UnfoldVectorImageWithMask(), 'Unfold Vector Image Within Mask to Table...');
147148

148149
colorMenu = addMenu(obj, imageMenu, 'Color and channels');
149150
addMenuItem(obj, colorMenu, imagem.actions.image.SplitImageRGB(), 'Split RGB');
@@ -251,20 +252,20 @@ function buildImageFrameMenu(obj, hf)
251252

252253
processMenu = addMenu(obj, hf, 'Process');
253254

254-
addMenuItem(obj, processMenu, imagem.actions.process.AdjustImageDynamic(), 'Adjust Dynamic');
255-
addMenuItem(obj, processMenu, imagem.actions.process.ImageReplaceValue(), 'Replace Value(s)...');
255+
addMenuItem(obj, processMenu, imagem.actions.process.AdjustImageDynamic(), 'Adjust Dynamic');
256+
addMenuItem(obj, processMenu, imagem.actions.process.ImageReplaceValue(), 'Replace Value(s)...');
256257

257258
% filtersMenu = addMenu(obj, processMenu, 'Filters', 'Separator', 'on');
258259

259-
addMenuItem(obj, processMenu, imagem.actions.process.ImageBoxMeanFilter(), 'Box Mean Filter...', 'Separator', 'on');
260-
addMenuItem(obj, processMenu, imagem.actions.process.ImageMedianFilter(), 'Median Filter...');
260+
addMenuItem(obj, processMenu, imagem.actions.process.ImageBoxMeanFilter(), 'Box Mean Filter...', 'Separator', 'on');
261+
addMenuItem(obj, processMenu, imagem.actions.process.ImageMedianFilter(), 'Median Filter...');
261262
addMenuItem(obj, processMenu, imagem.actions.process.ImageGaussianFilter(), 'Gaussian Filter...');
262263
addMenuItem(obj, processMenu, imagem.actions.process.ImageMorphologicalFilter(), 'Morphological Filter...');
263264

264-
addMenuItem(obj, processMenu, imagem.actions.process.ImageGradient(), 'Gradient', ...
265+
addMenuItem(obj, processMenu, imagem.actions.process.ImageGradient(), 'Gradient', ...
265266
'Separator', 'on', 'Accelerator', 'G');
266267
addMenuItem(obj, processMenu, imagem.actions.process.ImageGradientVector(), 'Gradient Vector');
267-
addMenuItem(obj, processMenu, imagem.actions.process.VectorImageNorm(), 'Norm');
268+
addMenuItem(obj, processMenu, imagem.actions.process.VectorImageNorm(), 'Norm');
268269

269270
% several operators based on connectivity (and reconstruction)
270271
connectOpMenu = addMenu(obj, processMenu, 'Connectivity-based Operators', 'Separator', 'on');
@@ -278,17 +279,17 @@ function buildImageFrameMenu(obj, hf)
278279
addMenuItem(obj, connectOpMenu, imagem.actions.process.ImageImposeMinima(), 'Impose Minima...');
279280

280281
% Threshold sub-menu
281-
addMenuItem(obj, processMenu, imagem.actions.process.ImageThreshold(), 'Manual Threshold...', ...
282+
addMenuItem(obj, processMenu, imagem.actions.process.ImageThreshold(), 'Manual Threshold...', ...
282283
'Separator', 'on', 'Accelerator', 'T');
283284
addMenuItem(obj, processMenu, imagem.actions.process.ImageAutoThresholdOtsu(), 'Auto Threshold (Otsu)');
284285
addMenuItem(obj, processMenu, imagem.actions.process.ImageMaxEntropyThreshold(), 'Auto Threshold (Max Entropy)');
285286
addMenuItem(obj, processMenu, imagem.actions.process.ImageKMeansSegmentation(), 'K-Means Segmentation');
286287
addMenuItem(obj, processMenu, imagem.actions.process.ImageWatershed(), 'Watershed...');
287288
addMenuItem(obj, processMenu, imagem.actions.process.ImageExtendedMinWatershed(), 'Extended Min Watershed...');
288289

289-
addMenuItem(obj, processMenu, imagem.actions.process.ImageArithmetic(), 'Image Arithmetic...', true);
290+
addMenuItem(obj, processMenu, imagem.actions.process.ImageArithmetic(), 'Image Arithmetic...', true);
290291
addMenuItem(obj, processMenu, imagem.actions.process.ImageValuesTransform(), 'Image Maths 1...');
291-
addMenuItem(obj, processMenu, imagem.actions.process.ImageMathematic(), 'Image Maths 2...');
292+
addMenuItem(obj, processMenu, imagem.actions.process.ImageMathematic(), 'Image Maths 2...');
292293

293294
binaryMenu = addMenu(obj, processMenu, 'Binary / Label Images', 'Separator', 'On');
294295
addMenuItem(obj, binaryMenu, imagem.actions.process.binary.ConnectedComponentsLabeling(), 'Connected Components Labeling');
@@ -301,7 +302,7 @@ function buildImageFrameMenu(obj, hf)
301302

302303
addMenuItem(obj, binaryMenu, imagem.actions.process.binary.ImageBooleanOp(), 'Boolean Operation...', true);
303304
addMenuItem(obj, binaryMenu, imagem.actions.process.binary.BinaryImageOverlay(), 'Image Overlay...');
304-
addMenuItem(obj, binaryMenu, imagem.actions.process.ImageLabelToRgb(), 'Label To RGB...');
305+
addMenuItem(obj, binaryMenu, imagem.actions.process.ImageLabelToRgb(), 'Label To RGB...');
305306
addMenuItem(obj, binaryMenu, imagem.actions.process.CreateLabelValuesMap(), 'Create Label Values Map...');
306307

307308

0 commit comments

Comments
 (0)