-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathThresholdTest.m
110 lines (79 loc) · 4.24 KB
/
ThresholdTest.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
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
function [BlurSize, ExtensionRatio] = ThresholdTest(ImageInfo, Background_nor, varargin)
Method = 'Fluorescent';
if isempty(varargin)
else
for i = 1:(size(varargin, 2) / 2)
AssignVar(varargin{i * 2 - 1}, varargin{i * 2})
end
end
File_id = ImageInfo.File_id;
TrackChannel = ImageInfo.TrackChannel;
if strcmp(ImageInfo.FileType, '.nd2')
Original_Image = ND2ReadSingle(ImageInfo.File_id, TrackChannel);
elseif strcmp(ImageInfo.FileType, '.tif')
Original_Image = imread(File_id, 'Index', TrackChannel, 'Info', ImageInfo.main);
end
if strcmp(Method, 'Fluorescent')
Normalize_Image = mat2gray(double(Original_Image(:, :)) ./ Background_nor);
elseif strcmp(Method, 'PhaseContrast')
Normalize_Image = 1-mat2gray(double(Original_Image(:, :)) - Background_nor);
end
BlurSize_test = 0.5:0.5:3;
ExtensionRatio_test = 1:1:8;
CellRegion_All = cell(0);
CellNumDetected = [];
NoiseNum = [];
Test_Index = 0;
disp('--------------------------------------------------------------------------------')
disp('Coarse tuning...')
for BlurSize_index = 1:size(BlurSize_test, 2)
for ExtensionRatio_index = 1:size(ExtensionRatio_test, 2)
[BW_Image] = BW_Single(Normalize_Image, BlurSize_test(BlurSize_index), ExtensionRatio_test(ExtensionRatio_index), 'AutoCellSize', 'off', 'ActiveContourStatus', 'off');
CellRegion = regionprops(BW_Image);
CellRegion_All{BlurSize_index}{ExtensionRatio_index} = (reshape(struct2array(CellRegion), [7, size(CellRegion, 1)]))';
CellNumDetected(BlurSize_index, ExtensionRatio_index) = size(CellRegion, 1);
CellSize = CellRegion_All{BlurSize_index}{ExtensionRatio_index}(:, 1);
NoiseNum(BlurSize_index, ExtensionRatio_index) = sum(CellSize < 5);
Test_Index = Test_Index + 1;
DisplayBar(Test_Index, size(BlurSize_test, 2) * size(ExtensionRatio_test, 2));
end
end
if exist('Warning', 'var')
warning('off','backtrace')
warning('Fitting background hist with RSquare < 0.98.')
warning('on','backtrace')
clear('Warning')
else
end
[BlurSize_better_Index, ExtensionRatio_better_Index] = find(CellNumDetected == max(CellNumDetected(NoiseNum <= max(min(NoiseNum(:)), 3))));
BlurSize_test_fine = (mean(BlurSize_test(BlurSize_better_Index)) - 0.2):0.1:(mean(BlurSize_test(BlurSize_better_Index)) + 0.2);
ExtensionRatio_test_fine = (mean(ExtensionRatio_test(ExtensionRatio_better_Index)) - 0.4):0.2:(mean(ExtensionRatio_test(ExtensionRatio_better_Index)) + 0.4);
CellRegion_All = cell(0);
CellNumDetected = [];
NoiseNum = [];
Test_Index = 0;
disp('--------------------------------------------------------------------------------')
disp('Fine tuning...')
for BlurSize_index = 1:size(BlurSize_test_fine, 2)
for ExtensionRatio_index = 1:size(ExtensionRatio_test_fine, 2)
[BW_Image] = BW_Single(Normalize_Image, BlurSize_test_fine(BlurSize_index), ExtensionRatio_test_fine(ExtensionRatio_index), 'AutoCellSize', 'off', 'ActiveContourStatus', 'off');
CellRegion = regionprops(BW_Image);
CellRegion_All{BlurSize_index}{ExtensionRatio_index} = (reshape(struct2array(CellRegion), [7, size(CellRegion, 1)]))';
CellNumDetected(BlurSize_index, ExtensionRatio_index) = size(CellRegion, 1);
CellSize = CellRegion_All{BlurSize_index}{ExtensionRatio_index}(:, 1);
NoiseNum(BlurSize_index, ExtensionRatio_index) = sum(CellSize < 5);
Test_Index = Test_Index + 1;
DisplayBar(Test_Index, size(BlurSize_test_fine, 2) * size(ExtensionRatio_test_fine, 2));
end
end
if exist('Warning', 'var')
warning('off','backtrace')
warning('Fitting background hist with RSquare < 0.98.')
warning('on','backtrace')
clear('Warning')
else
end
[BlurSize_best_Index, ExtensionRatio_best_Index] = find(CellNumDetected == max(CellNumDetected(NoiseNum < max(min(NoiseNum(:)), 3))));
BlurSize = mean(BlurSize_test_fine(BlurSize_best_Index));
ExtensionRatio = mean(ExtensionRatio_test_fine(ExtensionRatio_best_Index));
end