У меня есть изображение в matlab. Я пытаюсь сделать каждый второй пиксикл серым. Кто-нибудь знает, как это сделать?как сделать каждый второй пиксель серого в изображении в matlab
ответ
Возможно, самым простым способом создания шаблона таблицы является создание прямоугольной сетки (ndgrid
), а затем найти все элементы, где индексы столбца и строки суммируются с четным числом или не используют mod
.
sz = size(rgbImage);
[row, col] = ndgrid(1:sz(1), 1:sz(2));
checkers = logical(mod(row + col, 2));
Другой способ создать такую же логическую матрицу checkers
заключается в использовании bsxfun
, которая резко уменьшить потребление памяти предыдущими операциями.
checkers = bsxfun(@(x,y)mod(x + y, 2), 1:size(rgbImage, 1), (1:size(rgbImage, 2)).').';
Теперь нам нужно просто использовать эту логическую матрицу для индекса в rgbImage
и установить соответствующие значения серого цвета (128). Легкий способ сделать это состоит в том, чтобы сгладить первые измерения rgbImage
, чтобы мы могли индексировать их непосредственно с помощью логической матрицы, checkers
.
reshaped_image = reshape(rgbImage, [], 3); % Flatten first two dims
reshaped_image(checkers, :) = 128; % Set all channels to 128
newImage = reshape(reshaped_image, size(rgbImage)); % Shape it back into original
Update
Если вы хотите применить этот клетчатый узор на только белые части вашего оригинального rgbImage
, вы определенно можете сделать это. Для этого вам нужно создать логическую матрицу, которая указывает, где белые пиксели. Затем вы хотите найти, где шаблон шахматной доски - AND (&
), где пиксели белые.
isWhite = all(rgbImage == 255, 3); % White pixels where all channels = 255
tochecker = checkers & isWhite; % Combine with checkerboard
Затем примените этот шаблон таким же образом.
reshaped_image = reshape(rgbImage, [], 3); % Flatten first two dims
reshaped_image(tochecker, :) = 128; % Set all channels to 128
newImage = reshape(reshaped_image, size(rgbImage)); % Shape it back into original
Если применить это к изображению в вашем посте, мы получаем следующее
1) Чтение изображений:
rgbImage = imread('photo.jpg');
2) Преобразование в массив ячеек, где каждый элемент представляет собой пиксель, хотя 1x1x3 uint8 RGB триплет:
cellArray = mat2cell(rgbImage, ones(size(rgbImage,1),1), ones(size(rgbImage,2),1), size(rgbImage,3));
3) Замените каждую вторую ячейку серым цветом. Обратите внимание, мы должны сохранить оригинальный тип и размер, в противном случае следующий cell2mat
приведет к ошибке:
cellArray(1:2:end) = {reshape(uint8([255,255,255]*0.1), [1,1,3])};
4) Преобразование обратно в матрицу и дисплей:
imageGray = cell2mat(cellArray);
imshow(imageGray);
EDITшахматная
Если вы хотите, чтобы изображение было окрашено как шахматная доска, независимо от размеров изображения, Шаг 3 можно заменить на:
linInd = 1:numel(cellArray);
[i,j] = ind2sub(size(cellArray), linInd);
toColor = mod(i+j,2) == 0;
cellArray(linInd(toColor)) = {reshape(uint8([255,255,255]*0.1), [1,1,3])};
В основном мы только окрашиваем эти ячейки, i + j равно.
Просто добавлена модификация, которая дает вам шахматную доску. Первая часть кода окрашивает каждый второй пиксель, поэтому зависит от того, является ли ваша высота четной или нечетной. Новый код всегда создает внешний вид таблицы –
Привет, nirvana-mus, можно ли только окрасить пиксель в серый цвет, если пиксель белый? У меня есть черно-белое изображение, и я хотел бы иметь только клетчатые области в белых частях. Я опубликовал пример в моем оригинальном посте. – user6029533
@ user6029533 Я обновил свой ответ выше этого, чтобы включить условие, что исходные пиксели должны быть белыми. – Suever
- 1. Сделать прозрачный пиксель в Matlab
- 2. Как я могу сделать весь цветной пиксель до серого в рисовалом или растровом изображении
- 3. Как найти начальный пиксель в изображении с помощью matlab
- 4. cv: Mat, каждый второй пиксель установлен
- 5. Укажите пиксель в изображении magick
- 6. состояния маркирует пиксель в изображении
- 7. Matlab излучают звук каждый второй
- 8. Как можно удалить пиксель в растровом изображении?
- 9. Как удалить каждый второй пиксель из холста HTML5?
- 10. Оттенки серого в matlab
- 11. Определить пиковый черный пиксель в изображении (Android)?
- 12. Как нарисовать цветной пиксель на полутоновом изображении?
- 13. Извлечение значения в бинарном изображении в matlab
- 14. Как я могу хранить каждый пиксель в изображении в виде 16-разрядного индекса в colortable?
- 15. гистограмма значений шкалы серого в изображении numpy
- 16. Пройдите через каждый пиксель изображения
- 17. scrollTop получить каждый пиксель
- 18. Как я могу изменить каждый цвет в UIImage до серого?
- 19. Как сделать hasClass() проверяют каждый второй
- 20. Обнаружение битов на пиксель в изображении TIFF
- 21. Определить биты на пиксель в растровом изображении
- 22. Сегмент серого вещества в matlab
- 23. Как переставить пиксель бинарного изображения в matlab
- 24. оттенки серого, монохромный, бинарное изображение в MATLAB
- 25. Как сделать частично прозрачный оверлей на изображении в Matlab?
- 26. Как применить алгоритм выпуклого корпуса в MATLAB на изображении в масштабе серого
- 27. Выбор объектов, перекрывающих пиксель в matlab
- 28. Как сделать пиксель более заметным в LIbgdx?
- 29. Чтение изображений в оттенках серого в matlab
- 30. Как применить оттенки серого на изображении?
подобно шахматной доски или только в определенном измерении? – Suever
@Suever в шахматной доске было бы полезно, возможно ли это? – user6029533