Матлаб как сделать изображение черно белым

Добавил пользователь Владимир З.
Обновлено: 18.09.2024

РЕДАКТИРОВАТЬ 1: Когда я импортирую черно-белое изображение, я получаю двумерную матрицу логических значений (0 = черный, 1 = белый). Я думаю, что другой формат данных (логика против целого числа) - это то, что дает ошибки при использовании функции для изображений RGB.

Обновлено еще раз: Я адаптировал демонстрационный код из вышеупомянутого пакета и использовал предложение @Jonathan для преобразования 2D-матрицы в 3D-матрицу и добавил цикл для преобразования логических значений в целочисленные значения RGB, а затем использовал функцию imScrambleRand. Это работает, но я получаю следующее изображение: ЗАКРЕПЛЕННОЕ ИЗОБРАЖЕНИЕ. Это черно-белое изображение, с которого я начинаю: ЧБ ИЗОБРАЖЕНИЕ. Итак, я проверил скремблированное изображение, и функция из файла FEX фактически скремблирует в значений RGB, что означает, что я нашел, например, пиксель с RGB 0,255,0. Итак, я решил проблему, но на самом деле проблема в самой функции: она не скремблирует пиксели, а скремблирует значения, генерируя цвета, которых нет в исходном изображении.

РЕДАКТИРОВАТЬ 3: Я использовал код, предоставленный @nhowe, и получил именно то, что мне нужно, спасибо!

РЕДАКТИРОВАТЬ 4: Хорошо, оказывается, нельзя скремблировать пиксели, так как это делает изображение слишком разбросанным и отличным от исходного изображения (вы не говорите?), Но мне нужно скремблировать БЛОКИ ПИКСЕЛЕЙ, чтобы вы не могли действительно распознать изображение но черные пиксели не слишком разбросаны. Есть ли способ сделать это с помощью кода, предоставленного @nhowe?

Градации серого - это 2D-матрицы. BW относится к изображениям в градациях серого только с двумя значениями.

@AnderBiguri Когда я импортирую черно-белое изображение, я получаю 2D-матрицу с логическими значениями (0 = черный, 1 = белый).

2 ответа

Я делаю проект Matlab, и мне нужно знать, как построить массив изображений. Мне нужно иметь возможность перемещаться по массиву в том же формате, что и массив C с каким-то индексом. Я попробовал это сделать с помощью вот этого: images = [image1 image2 image3 image4 image5]; но я получаю эту.

Я изучаю обработку изображений и видел реализацию того, как превратить изображение в черно-белое, изменив цветовую матрицу. Ниже приведена реализация такой функции из библиотеки утилит Craigs : ColorMatrix TempMatrix = new ColorMatrix(); TempMatrix.Matrix = new float[][]< new float[]

enter image description here

Для проблем с памятью и скоростью вы можете заменить соответствующие строки следующим образом:

Основной случай одного изображения RGB (3D-матрица) был показан другими :

Если вы хотите применить это ко всем кадрам фильма (4D-матрица = height-by-width-by-color-by-frame), попробуйте следующее компактное решение:

Похожие вопросы:

Я новичок в matplotlib и застрял в цветных картах. В matplotlib как получить весь массив RGB цветов для конкретной цветовой карты, скажем, для hot? Например, если бы я был в MATLAB, я бы просто.

Matlab печатает цифры либо в черно-белом, либо в цветном варианте. Черно-белая печать фигуры-это NOT то же самое, что цветная печать, настроенная на black/white: каждый цвет, включая светлые.

Как бы я преобразовал эту таблицу в многомерный массив в javascript?

Я делаю проект Matlab, и мне нужно знать, как построить массив изображений. Мне нужно иметь возможность перемещаться по массиву в том же формате, что и массив C с каким-то индексом. Я попробовал это.

Я изучаю обработку изображений и видел реализацию того, как превратить изображение в черно-белое, изменив цветовую матрицу. Ниже приведена реализация такой функции из библиотеки утилит Craigs .

У меня есть массив из 50x50 элементов, каждый из которых либо истинен, либо ложен - это черно-белое изображение размером 50x50. Я не могу преобразовать это в изображение? Я перепробовал бесчисленное.

У меня есть серия черно-белых изображений (не в оттенках серого, а в черно-белом; матрицы 2D в Matlab), и мне нужно случайным образом скремблировать пиксели. Я нашел этот пакет в Mathworks File.

Задача: кто-то дал вам массив, весь перемешанный! Преобразуйте этот multidimensional array в единый массив. Я знаю, как преобразовать 2-мерный массив в один массив. Как бы я преобразовал.

Я пытаюсь добиться такого эффекта черно-белого текста на двухцветном заголовке, который всегда белый с одной стороны, и с фоновым изображением с другой стороны (разных цветов). это css, используемый.

У меня есть следующее инфракрасное изображение человеческого кулака, захваченного веб-камерой, преобразованной для работы в ИК-режиме. Картина захватила вены под кожей. То, что я хочу сделать, это просто сохранить кулак и избавиться от окружающей черной области. Как это сделать в MATLAB?

enter image description here

Вот что я сделал до сих пор, но я просто получаю черное изображение для этого

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно, и как я могу выполнить то, что хочу? Кроме того, когда я хочу сказать, что хочу избавиться от фона, я хочу, чтобы вместо белого был белый фон > Потому что цель этого проекта – сохранить только вены, жилы будут сохранены как черные. и тогда я возьму координаты этих точек. Поэтому я не хочу, чтобы фон был сгенерирован как координаты…! Поэтому я хочу, чтобы фон был белым. как это сделать?

Что вы хотите сделать, называется segmentation и является большой темой в обработке изображений. Ваше изображение довольно приятное, поэтому, если у вас есть панель обработки изображений, это довольно просто. И даже если у вас его еще не все так сложно.

Как упоминает Крис, вы должны преобразовать изображение в двойное, прежде чем что-либо сделать с ним. Если у вас есть панель инструментов обработки изображений, вы можете использовать функцию graythresh, чтобы найти лучший пороговый уровень. Обратите внимание, что вам не нужно использовать для создания циклов для создания пороговых значений, в MATLAB вы можете порождать всю матрицу в одной строке.

segmented image

Это дает вам двоичное изображение, в котором ваш кулак имеет значение 1 и фоновую метку 0. Чтобы сохранить кулак как есть, мы умножаем двоичную версию с исходной версией. Теперь фон равен нулю, а кулак сохраняет свои исходные значения.

fist

Если у вас нет инструментария для обработки изображений, вам нужно вручную установить пороговый уровень. Это может быть немного сложно. Вы использовали 0.06, но graythresh показывает, что 0.2980 является лучшим. Я считаю, что хороший способ найти пороговое значение – посмотреть на гистограмму изображения.

histogram

Мы можем ясно видеть из гистограммы, что у нас есть два кластера точек, и что любое значение между 2 и 3 будет довольно хорошо отделять кластеры. Поэтому мы должны использовать значение в этом интервале для создания пороговых значений.

несколько проблем, которые я вижу:

В вашем коде вы используете g и f как счетчики циклов, но вы всегда получаете доступ к массиву b как b (j, k).

Кроме того, imread читает uint8, поэтому вы не можете сравнить это с двойным (0.06). Итак, конвертируйте в double через:

Кроме того, в этом случае не очень важно, но вы динамически увеличиваетесь с каждой итерацией цикла. Если изображение велико, это значительно затруднит выполнение вашего кода. Пер выделяет его через:

После этих изменений он производит нечто похожее на ваш кулак. Однако, поскольку фон не является однородным цветом, он не работает слишком хорошо. Эта часть выходит за рамки моего опыта…

РЕДАКТИРОВАТЬ 1: Когда я импортирую черно-белое изображение, я получаю двумерную матрицу логических значений (0 = черный, 1 = белый). Я думаю, что другой формат данных (логика против целого числа) - это то, что дает ошибки при использовании функции для изображений RGB.

Обновлено еще раз: Я адаптировал демонстрационный код из вышеупомянутого пакета и использовал предложение @Jonathan для преобразования 2D-матрицы в 3D-матрицу и добавил цикл для преобразования логических значений в целочисленные значения RGB, а затем использовал функцию imScrambleRand. Это работает, но я получаю следующее изображение: ЗАКРЕПЛЕННОЕ ИЗОБРАЖЕНИЕ. Это черно-белое изображение, с которого я начинаю: ЧБ ИЗОБРАЖЕНИЕ. Итак, я проверил скремблированное изображение, и функция из файла FEX фактически скремблирует в значений RGB, что означает, что я нашел, например, пиксель с RGB 0,255,0. Итак, я решил проблему, но на самом деле проблема в самой функции: она не скремблирует пиксели, а скремблирует значения, генерируя цвета, которых нет в исходном изображении.

РЕДАКТИРОВАТЬ 3: Я использовал код, предоставленный @nhowe, и получил именно то, что мне нужно, спасибо!

РЕДАКТИРОВАТЬ 4: Хорошо, оказывается, нельзя скремблировать пиксели, так как это делает изображение слишком разбросанным и отличным от исходного изображения (вы не говорите?), Но мне нужно скремблировать БЛОКИ ПИКСЕЛЕЙ, чтобы вы не могли действительно распознать изображение но черные пиксели не слишком разбросаны. Есть ли способ сделать это с помощью кода, предоставленного @nhowe?

Градации серого - это 2D-матрицы. BW относится к изображениям в градациях серого только с двумя значениями.

@AnderBiguri Когда я импортирую черно-белое изображение, я получаю 2D-матрицу с логическими значениями (0 = черный, 1 = белый).

Читайте также: