forked from petteriTeikari/twoPhotonVessels
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsegment_asetsPreProcessImages.m
71 lines (56 loc) · 3.18 KB
/
segment_asetsPreProcessImages.m
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
function [imageStack, fusionImageStack, fusionImageStackBright, vesselnessStack, edges, edgesSigmoid, im_bias_corrected] ...
= segment_asetsPreProcessImages(imageStack, vesselnessStack)
% normalize inputs (just to be sure)
imageStack = imageStack / max(imageStack(:));
vesselnessStack = vesselnessStack / max(vesselnessStack(:));
% find edges from vesselness stack that could be used as
% regularization term for the segmentation
edges = zeros(size(vesselnessStack));
for i = 1 : size(vesselnessStack,3)
edges(:,:,i) = segment_findEdges(vesselnessStack(:,:,i), 0);
end
edges = abs(vesselnessStack);
edges = edges / max(edges(:));
% boosts mid-tones up
edgesSigmoid = enhance_sigmoidFilter(edges);
% fusion image
vesselnessStackPositive = vesselnessStack;
vesselnessStackPositive(vesselnessStackPositive > 1) = 1; % clip
% add only if vesselnessStackPositive is larger than img
largerMask = vesselnessStackPositive > imageStack;
vesselnessStackPositive(~largerMask) = 0;
fusionImageStack = imageStack + vesselnessStackPositive;
fusionImageStack(fusionImageStack > 1) = 1; % clip
% clip above threshold to boost mid-tones again
fusionImageStackBright = enhance_brightenVessels(fusionImageStack);
% try to correct the "uneven illumination"
im_bias_corrected = zeros(size(imageStack));
im_bias = zeros(size(imageStack));
for i = 1 : size(imageStack, 3)
% 1st guess with manually-tuned operator
% http://www.mathworks.com/help/images/examples/correcting-nonuniform-illumination.html
background = imopen(fusionImageStackBright(:,:,1),strel('disk',75));
fusionImageBackgroundRemoved(:,:,i) = fusionImageStackBright(:,:,i) - background;
% 2nd Guess with the bias corrector
% http://www.mathworks.com/matlabcentral/fileexchange/27315-nu-corrector
[im_bias_corrected(:,:,i), im_bias(:,:,i)] = biasCorrection_bipoly_PT(fusionImageStackBright(:,:,i), 5);
im_bias_corrected(:,:,i) = im_bias_corrected(:,:,i) - min(min(im_bias_corrected(:,:,i)));
im_bias_corrected(:,:,i) = im_bias_corrected(:,:,i) / max(max(im_bias_corrected(:)));
% do not allow the image to be brightened
whos
brightMask = im_bias_corrected(:,:,i) > fusionImageStackBright(:,:,i);
imBiasTemp = im_bias_corrected(:,:,i);
fusionTemp = fusionImageStackBright(:,:,i);
imBiasTemp(brightMask) = fusionTemp(brightMask);
im_bias_corrected(:,:,i) = imBiasTemp;
im_bias_corrected(:,:,i) = im_bias_corrected(:,:,i) + vesselnessStackPositive(:,:,i);
% im_bias_corrected2 = fusionImageStackBright(:,:,1) - double(im_bias);
end
%{
subplot(1,3,1);
imshow(fusionImageStackBright(:,:,1), [])
subplot(1,3,2);
imshow(im_bias,[])
subplot(1,3,3);
imshow(im_bias_corrected,[])
%}