% Во-первых, создайте изображения
FirstImage = [
108 113 121 129 128 124 117 101
114 76 60 110 98 74 121 109
114 62 52 105 85 59 121 116
110 59 54 104 0 0 0 115
104 55 54 104 0 0 0 113
96 48 51 105 0 0 0 113
94 60 69 115 0 0 0 110
99 108 122 130 135 0 0 109
];
SecondImage = [
0 0 0 0 0 0
138 137 137 137 0 0
138 127 129 135 138 0
132 97 99 133 135 0
134 108 110 137 137 0
141 140 140 140 139 0
138 138 138 140 0 0
0 0 0 0 0 0
];
% Сделайте изображение двоичным и инвертируйте его так, чтобы нули в изображении были равны 1.
% Это сделано для того, чтобы сделать его совместимым с bwtraceboundary
im = FirstImage == 0 ;
% Найдите координаты объекта, соответствующие требованиям bwtraceboundary
objectCoord = find(im);
[startRow,startCol] = ind2sub(size(im),objectCoord(1) );
% Функция find()
просматривает матрицу столбец за столбцом,
% поэтому мы знаем, что она начнется в верхнем левом углу и будет работать
% вниз, столбец за столбцом. Следовательно, некоторая часть границы должна
% лежать восточнее первой найденной координаты. Это один из способов найти
% начальных координат
contour = bwtraceboundary(im,[startRow startCol],'E' );
% Обозначить контур
contourimage = zeros(size(im));
contourind = sub2ind(size(contourimage),contour(:,1),contour(:,2))
contourimage(contourind) = 1;
contourimage =
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 0
0 0 0 0 1 0 1 0
0 0 0 0 1 0 1 0
0 0 0 0 1 0 1 0
0 0 0 0 0 1 1 0
% Теперь это обнаружит только границу самого объекта.
% Ищем ближайшие ненулевые значения к границе.
% Чтобы получить ближайшие ненулевые значения,
% применяем разбавление к счетчику image и
%, затем умножьте его поэлементно на исходное изображение.
% Вычислите среднее значение ненулевых значений
% Проведение разбавления
mask = bwmorph(contourimage,'dilate')
mask =
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 1
0 0 0 1 1 1 1 1
0 0 0 1 1 1 1 1
0 0 0 1 1 1 1 1
0 0 0 1 1 1 1 1
0 0 0 1 1 1 1 1
% Умножить mask
на исходное изображение по элементам.
% Затем сам объект будет обнулен, а ненулевая граница останется.
A=mask.*FirstImage
A =
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 105 85 59 121 116
0 0 0 104 0 0 0 115
0 0 0 104 0 0 0 113
0 0 0 105 0 0 0 113
0 0 0 115 0 0 0 110
0 0 0 130 135 0 0 109
% Затем рассчитайте среднее значение
mean(A(A>0))
ans =
108.6875
person
kkuilla
schedule
02.12.2013
bwtraceboundary
, чтобы найти соответствующие пиксели. - person bla   schedule 02.12.2013