Вот один пример рисования линии непосредственно в матрице. Сначала мы создадим матрицу нулей для пустого изображения:
mat = zeros(250, 250, 'uint8'); % A 250-by-250 matrix of type uint8
Тогда, скажем, мы хотим нарисовать линию от (30, 35)
до (200, 60)
. Сначала мы посчитаем, сколько пикселей должно быть длиной строки:
x = [30 200]; % x coordinates (running along matrix columns)
y = [35 60]; % y coordinates (running along matrix rows)
nPoints = max(abs(diff(x)), abs(diff(y)))+1; % Number of points in line
Далее мы вычисляем индексы строк и столбцов для пикселов строки, используя linspace
, конвертируем их из индексов с индексами в линейные индексы, используя sub2ind
, а затем используем их для изменения mat
rIndex = round(linspace(y(1), y(2), nPoints)); % Row indices
cIndex = round(linspace(x(1), x(2), nPoints)); % Column indices
index = sub2ind(size(mat), rIndex, cIndex); % Linear indices
mat(index) = 255; % Set the line pixels to the max value of 255 for uint8 types
Затем вы можете визуализировать строку и отфильтрованную версию следующим образом:
subplot(1, 2, 1);
image(mat); % Show original line image
colormap(gray); % Change colormap
title('Line');
subplot(1, 2, 2);
h = fspecial('gaussian', 20, 10); % Create filter
filteredImg = imfilter(mat, h); % Filter image
image(filteredImg); % Show filtered line image
title('Filtered line');