Download this file

132 lines (128 with data), 5.3 kB

  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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% New Perimeter Algorithm %%%%%%
%%%%%% Shu Xie %%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function P = CrackcodePerim(I) %#ok<*INUSD,*STOUT>
%%%% Create Binary image %%%%
for xi = 1:size(I,1)
for yi = 1:size(I,2)
if I(xi,yi) ~= 0
I(xi,yi) = 1;
end
end
end
counter_p=0; % Counter for Perimeter
if size(I,1)>1 && size(I,2)>1 % When Image size is larger that 1*1 pixels
for x = 1:size(I,1)
for y = 1:size(I,2)
if I(x,y) == 1
if x == 1
% perimeter9(): x = 1 and y = 1
if y == 1
counter_p = counter_p + 2; % Boundary that outside image
if I(x,y+1) == 0
counter_p = counter_p + 1;
end
if I(x+1,y) == 0
counter_p = counter_p + 1;
end
% perimeter8(): x = 1 and y = max
elseif y == size(I,2)
counter_p = counter_p + 2; % Boundary that outside image
if I(x,y-1) == 0
counter_p = counter_p + 1;
end
if I(x+1,y) == 0
counter_p = counter_p + 1;
end
% perimeter7(): x = 1 and y = mid
else
counter_p = counter_p + 1; % Boundary that outside image
if I(x,y+1) == 0
counter_p = counter_p + 1;
end
if I(x,y-1) == 0
counter_p = counter_p + 1;
end
if I(x+1,y) == 0
counter_p = counter_p + 1;
end
end
elseif x == size(I,1)
% perimeter6(): x = max and y = 1
if y == 1
counter_p = counter_p + 2; % Boundary that outside image
if I(x,y+1) == 0
counter_p = counter_p + 1;
end
if I(x-1,y) == 0
counter_p = counter_p + 1;
end
% perimeter5(): x = max and y = max
elseif y == size(I,2)
counter_p = counter_p + 2; % Boundary that outside image
if I(x,y-1) == 0
counter_p = counter_p + 1;
end
if I(x-1,y) == 0
counter_p = counter_p + 1;
end
% perimeter4(): x = max and y = mid
else
counter_p = counter_p + 1; % Boundary that outside image
if I(x,y+1) == 0
counter_p = counter_p + 1;
end
if I(x,y-1) == 0
counter_p = counter_p + 1;
end
if I(x-1,y) == 0
counter_p = counter_p + 1;
end
end
else
% perimeter3(): x = mid and y = 1
if y == 1
counter_p = counter_p + 1; % Boundary that outside image
if I(x,y+1) == 0
counter_p = counter_p + 1;
end
if I(x+1,y) == 0
counter_p = counter_p + 1;
end
if I(x-1,y) == 0
counter_p = counter_p + 1;
end
% perimeter2(): x = mid and y = max
elseif y == size(I,2)
counter_p = counter_p + 1; % Boundary that outside image
if I(x,y-1) == 0
counter_p = counter_p + 1;
end
if I(x+1,y) == 0
counter_p = counter_p + 1;
end
if I(x-1,y) == 0
counter_p = counter_p + 1;
end
% perimeter1(): x = mid and y = mid
else
if I(x,y+1) == 0
counter_p = counter_p + 1;
end
if I(x,y-1) == 0
counter_p = counter_p + 1;
end
if I(x+1,y) == 0
counter_p = counter_p + 1;
end
if I(x-1,y) == 0
counter_p = counter_p + 1;
end
end
end
end
end
end
end
P = counter_p;