Как инвертировать изображение в градациях серого и преобразовать его в двоичное изображение? - PullRequest
3 голосов
/ 05 июня 2010

Я хочу создать изображение, подобное этому: alt text Из изображения, подобного этому: альтернативный текст http://internationalpropertiesregistry.com/Server/showFile.php?file=%2FUpload%2Funtitled.jpgb523c7595dd8e7514e1c6d51a83161a3.jpeg

ОБНОВЛЕНИЕ

Вот что генерируется 255-img, но результат не совпадает точно: альтернативный текст http://internationalpropertiesregistry.com/Server/showFile.php?file=%2FUpload%2Funtitled.jpg61f9edbeb4f0285c2a1772cced3ce393.jpeg

Ответы [ 5 ]

5 голосов
/ 05 июня 2010

Это зависит от типа вашей входной матрицы.

Если это логическая матрица, вы можете просто использовать

invImg = ~img;

Если у вас есть скалярные значения в диапазоне от 0 до n, используйте

invImg = n - img;

Edit:

Если вы хотите черно-белое изображение, попробуйте следующее (возможно, вам нужно поиграть с параметром level ):

invImg = ~im2bw(img, 0.5);
3 голосов
/ 09 июня 2010

Как насчет переворачивания карты цветов?

Colormap (flipud (карта цветов));

3 голосов
/ 06 июня 2010

У меня возникли проблемы при обработке второго изображения, которое вы разместили выше. Поскольку сжатие изображения выполняется в формате JPEG, кажется, что строки и текст размыты, и это усложняет настройку порогового значения по вашему желанию.

Вместо этого я вернулся к GIF-изображению индексированного цвета, которое вы разместили на предыдущем связанном вопросе , преобразовал его в оттенки серого (используя функцию IND2GRAY из Обработка изображений Панель инструментов ), затем преобразовал это в перевернутое черно-белое изображение, чтобы оно соответствовало формату первого изображения, которое вы разместили выше. Вот код, который я использовал:

[X,map] = imread('original_chart.gif');  %# Load the indexed color image
img = ind2gray(X,map);                   %# Convert the image to grayscale
reversedImage = img < max(img(:));       %# Convert to reversed black and white

А вот как выглядит reversedImage:

alt text

1 голос
/ 06 июня 2010

Ваши изображения не бинарные черно-белые. Там тоже серый.

Исходя из ваших правок, вы считаете, что любой пиксель выключен, а любой пиксель выключен (то есть преобразован в прямое двоичное черно-белое изображение), это должно делать то, что вы хотите:

newImg = zeros(size(img));
newImg(img > 0) = 0;    % <-- This line is not really needed
newImg(img = 0) = 1;

Обратите внимание, что вторая строка не является строго необходимой, поскольку новое изображение в любом случае инициализируется равным 0, оно просто показывает, что именно происходит.

1 голос
/ 06 июня 2010

Похоже, что 3-й сюжет является противоположностью 2-го выше.

Следует учитывать, что вы используете для рисования изображения image() imagesc() или imshow() imagesc() выполняет автоматическое масштабирование, а imshow() будет использовать карту цветов.

Еще одна вещь, которую следует учитывать, - это само входное изображение. Диапазон составляет от 0 до 255, от 0 до 1,0 или RGB? В зависимости от того, что это, обратное будет отличаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...