Skip to content

Commit d0943d5

Browse files
committed
better support of propagation of image name during processing
1 parent a824220 commit d0943d5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+362
-131
lines changed

src/@Image/Image.m

+2
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@
108108
methods(Access = protected)
109109

110110
se = defaultStructuringElement(obj, varargin)
111+
112+
name = createNewName(obj, pattern)
111113
end
112114

113115
%% Constructor declaration

src/@Image/abs.m

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212

1313
% ------
1414
% Author: David Legland
15-
% e-mail: david.legland@inra.fr
15+
% e-mail: david.legland@inrae.fr
1616
% Created: 2010-12-02, using Matlab 7.9.0.529 (R2009b)
1717
% Copyright 2010 INRA - Cepia Software Platform.
1818

19-
res = Image('data', abs(obj.Data), 'parent', obj);
19+
name = createNewName(obj, '%s-abs');
20+
res = Image('Data', abs(obj.Data), 'Parent', obj, 'Name', name);

src/@Image/adjustDynamic.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@
9393
res = cast(res, outputClass);
9494

9595
% create resulting Image
96-
res = Image('data', res, 'parent', obj);
96+
name = createNewName(obj, '%s-adjDyn');
97+
res = Image('Data', res, 'Parent', obj, 'Name', name);
9798

9899

99100
function [mini, maxi] = computeExtremeValues(data) %#ok<DEFNU>

src/@Image/angle.m

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
function ang = angle(this)
2-
%Returns the phase angles, in radians, of an image with complex elements.
1+
function ang = angle(obj)
2+
% Return the phase angles, in radians, of an image with complex elements.
33
%
44
% PHASE = angle(I)
55
%
@@ -15,7 +15,10 @@
1515
% Created: 2017-09-29, using Matlab 9.3.0.713579 (R2017b)
1616
% Copyright 2017 INRA - Cepia Software Platform.
1717

18-
real = getBuffer(channel(this, 1));
19-
imag = getBuffer(channel(this, 2));
18+
% retrieve components
19+
imgA = channel(obj, 1);
20+
imgB = channel(obj, 2);
2021

21-
ang = Image(atan2(imag, real));
22+
% create result image
23+
name = createNewName(obj, '%s-angle');
24+
ang = Image('Data', atan2(imgA.Data, imgB.Data), 'Parent', obj, 'Name', name);

src/@Image/blackTopHat.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@
2525
dat = imbothat(obj.Data, varargin{1});
2626

2727
% create result image
28-
res = Image('data', dat, 'parent', obj);
28+
name = createNewName(obj, '%s-BTH');
29+
res = Image('Data', dat, 'Parent', obj, 'Name', name);

src/@Image/boundary.m

+5-1
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,8 @@
9797
%% Process
9898

9999
% erode the structure and compare with original
100-
bnd = Image('data', op(obj.Data, se) ~= obj.Data, 'parent', obj);
100+
newData = op(obj.Data, se) ~= obj.Data;
101+
102+
% create result image
103+
name = createNewName(obj, '%s-bnd');
104+
bnd = Image('Data', newData, 'Parent', obj, 'Name', name);

src/@Image/boxFilter.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,5 @@
4040
end
4141

4242
% create result image
43-
res = Image('data', data, 'parent', obj);
43+
name = createNewName(obj, '%s-boxFilt');
44+
res = Image('Data', data, 'Parent', obj, 'Name', name);

src/@Image/cat.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@
2626
data = cat(dim, data, var.Data);
2727
end
2828

29-
res = Image('data', data, 'Parent', obj);
29+
name = createNewName(obj, '%s-cat');
30+
res = Image('data', data, 'Parent', obj, 'Name', name);

src/@Image/circshift.m

+4-3
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,17 @@
99
% show(res)
1010
%
1111
% See also
12-
%
12+
% fftshift
1313

1414
% ------
1515
% Author: David Legland
16-
% e-mail: david.legland@inra.fr
16+
% e-mail: david.legland@inrae.fr
1717
% Created: 2011-12-18, using Matlab 7.9.0.529 (R2009b)
1818
% Copyright 2011 INRA - Cepia Software Platform.
1919

2020
% process data buffer, using Matlab Image processing Toolbox
2121
data = circshift(obj.Data, varargin{:});
2222

2323
% create new image object for storing result
24-
res = Image.create('data', data, 'parent', obj);
24+
name = createNewName(obj, '%s-circshift');
25+
res = Image('Data', data, 'Parent', obj, 'Name', name);

src/@Image/closing.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@
1818
data = imclose(getBuffer(obj), varargin{:});
1919

2020
% create new image object for storing result
21-
res = Image(data, 'parent', obj);
21+
name = createNewName(obj, '%s-clo');
22+
res = Image(data, 'Parent', obj, 'Name', name);

src/@Image/componentLabeling.m

+4-7
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
% ------
1919
% Author: David Legland
20-
% e-mail: david.legland@inra.fr
20+
% e-mail: david.legland@inrae.fr
2121
% Created: 2011-08-05, using Matlab 7.9.0.529 (R2009b)
2222
% Copyright 2011 INRA - Cepia Software Platform.
2323

@@ -40,11 +40,8 @@
4040
end
4141

4242
% create new image
43+
name = createNewName(obj, '%s-labels');
4344
res = Image('Data', data, ...
4445
'Parent', obj, ...
45-
'Type', 'label');
46-
47-
% setup result image name
48-
if ~isempty(obj.Name)
49-
res.Name = sprintf('componentLabeling(%s)', obj.Name);
50-
end
46+
'Type', 'label', ...
47+
'Name', name);

src/@Image/createNewName.m

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
function name = createNewName(obj, pattern)
2+
% Create a new name from current image name and a string pattern.
3+
%
4+
% NAME = createNewName(IMG, PATTERN)
5+
% Returns a new name, based on the following rule:
6+
% * if image name is not empty, return sprintf(PATTERN, IMG.Name)
7+
% * otherwise, return empty
8+
%
9+
% Example
10+
% obj.Name = 'baseName';
11+
% newName = createNewName(obj, '%s-processed');
12+
% newName
13+
% 'baseName-processed'
14+
%
15+
% See also
16+
%
17+
18+
% ------
19+
% Author: David Legland
20+
21+
% INRAE - BIA Research Unit - BIBS Platform (Nantes)
22+
% Created: 2021-01-05, using Matlab 9.8.0.1323502 (R2020a)
23+
% Copyright 2021 INRAE.
24+
25+
name = '';
26+
if ~isempty(obj.Name)
27+
name = sprintf(pattern, obj.Name);
28+
end

src/@Image/crop.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@
4949
end
5050

5151
% create new image with cropped buffer
52-
res = Image('data', obj.Data(indices{:}), 'parent', obj);
52+
name = createNewName(obj, '%s-crop');
53+
res = Image('Data', obj.Data(indices{:}), 'Parent', obj, 'Name', name);
5354

5455
% change origin of new image
5556
res.Origin = newOrigin;

src/@Image/ctranspose.m

+5-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
% ------
1717
% Author: David Legland
18-
% e-mail: david.legland@inra.fr
18+
% e-mail: david.legland@inrae.fr
1919
% Created: 2010-11-26, using Matlab 7.9.0.529 (R2009b)
2020
% Copyright 2010 INRA - Cepia Software Platform.
2121

@@ -26,6 +26,8 @@
2626
end
2727

2828
% permute data array
29-
dat = permute(obj.Data, [2 1 3:5]);
29+
datz = permute(obj.Data, [2 1 3:5]);
3030

31-
res = Image('data', dat, 'parent', obj);
31+
% create result image
32+
name = createNewName(obj, 'transpose(%s)');
33+
res = Image('Data', datz, 'Parent', obj, 'Name', name);

src/@Image/dilation.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@
1919
data = imdilate(getBuffer(obj), varargin{:});
2020

2121
% create new image object for storing result
22-
res = Image(data, 'parent', obj);
22+
name = createNewName(obj, '%s-dil');
23+
res = Image(data, 'Parent', obj, 'Name', name);

src/@Image/directionalFilter.m

+3-3
Original file line numberDiff line numberDiff line change
@@ -153,13 +153,13 @@
153153
end
154154

155155
% keep max or min along all directions
156-
res = feval(op2, res, feval(op1, obj.Data, se));
156+
res = feval(op2, res, feval(op1, obj.Data, se)); %#ok<FVAL>
157157
end
158158

159159

160160
%% create result image
161-
162-
res = Image('data', res, 'parent', obj);
161+
name = createNewName(obj, '%s-dirFilt');
162+
res = Image('Data', res, 'Parent', obj, 'Name', name);
163163

164164

165165
function res = immean(img, filt, varargin)

src/@Image/distanceMap.m

+6-9
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,11 @@
2828
% compute distance map
2929
dist = bwdist(~obj.Data, varargin{:});
3030

31-
newName = '';
32-
if ~isempty(obj.Name)
33-
newName = sprintf('distanceMap(%s)', obj.Name);
34-
end
31+
newName = createNewName(obj, '%s-distMap');
3532

3633
% create new image
37-
map = Image('data', dist, ...
38-
'parent', obj, ...
39-
'name', newName, ...
40-
'type', 'intensity', ...
41-
'channelNames', {'distance'});
34+
map = Image('Data', dist, ...
35+
'Parent', obj, ...
36+
'Name', newName, ...
37+
'Type', 'intensity', ...
38+
'ChannelNames', {'distance'});

src/@Image/double2rgb.m

+6-7
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
% Example
2121
% % Distance map of a binary image
2222
% img = Image.read('circles.png');
23-
% dist = distanceMap(img);
23+
% dist = distanceMap(invert(img));
2424
% dist(img) = NaN;
2525
% rgb = double2rgb(dist, 'parula', [], 'w');
2626
% show(rgb);
@@ -83,15 +83,14 @@
8383
rgb(:,:,3,:) = b;
8484
end
8585

86-
newName = '';
87-
if ~isempty(obj.Name)
88-
newName = sprintf('label2rgb(%s)', obj.Name);
89-
end
86+
% create result array
87+
data = permute(rgb, [2 1 3 4:length(dim)]);
9088

9189
% create Image object from data
92-
rgb = Image(permute(rgb, [2 1 3 4:length(dim)]), 'Type', 'color', ...
90+
name = createNewName(obj, '%s-rgb');
91+
rgb = Image(data, 'Type', 'color', ...
9392
'Parent', obj, ...
94-
'Name', newName);
93+
'Name', name);
9594

9695
function color = parseColor(color)
9796

src/@Image/erosion.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@
2121
data = imerode(getBuffer(obj), varargin{:});
2222

2323
% create new image object for storing result
24-
res = Image(data, 'parent', obj);
24+
name = createNewName(obj, '%s-ero');
25+
res = Image(data, 'Parent', obj, 'Name', name);

src/@Image/exp.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@
1717

1818
newData = exp(double(obj.Data));
1919

20-
res = Image('data', newData, 'parent', obj, 'type', 'intensity');
20+
name = createNewName(obj, '%s-exp');
21+
res = Image('Data', newData, 'Parent', obj, 'Type', 'Intensity', 'Name', name);

src/@Image/extendedMaxima.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,5 @@
5050
data = imextendedmax(obj.Data, dyn, conn);
5151

5252
% create result image
53-
res = Image('data', data, 'parent', obj, 'type', 'binary');
53+
name = createNewName(obj, '%s-extMax');
54+
res = Image('Data', data, 'Parent', obj, 'Type', 'binary', 'Name', name);

src/@Image/extendedMinima.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,5 @@
4343
data = imextendedmin(obj.Data, dyn, conn);
4444

4545
% create result image
46-
res = Image('data', data, 'parent', obj, 'type', 'binary');
46+
name = createNewName(obj, '%s-extMin');
47+
res = Image('Data', data, 'Parent', obj, 'Type', 'binary', 'Name', name);

src/@Image/fillHoles.m

+3-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
% ------
1515
% Author: David Legland
16-
% e-mail: david.legland@inra.fr
16+
% e-mail: david.legland@inrae.fr
1717
% Created: 2011-09-11, using Matlab 7.9.0.529 (R2009b)
1818
% Copyright 2011 INRA - Cepia Software Platform.
1919

@@ -32,4 +32,5 @@
3232
newData = imfill(obj.Data, conn, 'holes');
3333

3434
% create resulting image
35-
res = Image('data', newData, 'parent', obj);
35+
name = createNewName(obj, '%s-fillHoles');
36+
res = Image('Data', newData, 'Parent', obj, 'Name', name);

src/@Image/filter.m

+3-2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
h = double(h);
2323

2424
% create new image with result of filtering
25+
name = createNewName(obj, '%s-filt');
2526
res = Image(...
26-
'data', imfilter(obj.Data, h, varargin{:}), ...
27-
'parent', obj);
27+
'Data', imfilter(obj.Data, h, varargin{:}), ...
28+
'Parent', obj, 'Name', name);

src/@Image/flip.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,5 @@
3838
end
3939

4040
% create empty result image
41-
res = Image('data', flip(obj.Data, d), 'parent', obj);
41+
name = createNewName(obj, '%s-flip');
42+
res = Image('Data', flip(obj.Data, d), 'Parent', obj, 'Name', name);

src/@Image/floodFill.m

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function res = floodFill(img, pos, value, varargin)
1+
function res = floodFill(obj, pos, value, varargin)
22
% Flood-fill operation from a position.
33
%
44
% IMG2 = floodFill(IMG, POS, V)
@@ -24,22 +24,23 @@
2424
% Copyright 2020 INRAE.
2525

2626
% check input dimensions
27-
if size(pos, 2) ~= ndims(img)
27+
if size(pos, 2) ~= ndims(obj)
2828
error('Image:floodFill', ...
2929
'position array size must match image dimension');
3030
end
3131

3232
% create binary image of mask
3333
pos = num2cell(pos);
34-
mask = img == img.Data(pos{:});
34+
mask = obj == obj.Data(pos{:});
3535

3636
% binary image for marker
37-
marker = Image.false(size(img));
37+
marker = Image.false(size(obj));
3838
marker.Data(pos{:}) = true;
3939

4040
% compute the region composed of connected pixels with same value
4141
rec = reconstruction(marker, mask);
4242

4343
% replace values in result image
44-
res = Image(img);
44+
name = createNewName(obj, '%s-floodFill');
45+
res = Image(obj, 'Name', name);
4546
res.Data(rec.Data) = value;

src/@Image/geodesicDistanceMap.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -308,4 +308,5 @@
308308
dist(mask > 0) = dist(mask > 0) / w1;
309309
end
310310

311-
dist = Image('Data', dist, 'Parent', mask, 'Type', 'Intensity');
311+
name = createNewName(mask, '%s-geodDistMap');
312+
dist = Image('Data', dist, 'Parent', mask, 'Type', 'Intensity', 'Name', name);

0 commit comments

Comments
 (0)