Зашифруйте пиксели черно-белых изображений в Matlab - PullRequest
0 голосов
/ 08 мая 2018

У меня есть серия черно-белых изображений (не в оттенках серого, черно-белое; 2D-матрицы в Matlab), и мне нужно случайным образом скремблировать пиксели.Я нашел этот пакет в Mathworks File Exchange (https://it.mathworks.com/matlabcentral/fileexchange/66472-image-shuffle);, одна из функций, imScrambleRand , делает именно то, что мне нужно, но он работает для изображений RGB (3D-матрицы). Есть ли способпреобразовать черно-белые изображения в 3D-матрицы, чтобы я мог использовать эту функцию? Или кто-нибудь может предложить другой сценарий, который делает то, что мне нужно? Помните, что я не знаком с Matlab, но я сделаю все возможное.

Спасибо.

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

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

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

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

РЕДАКТИРОВАТЬ 5: Это должно быть в порядке с этой функцией: https://it.mathworks.com/matlabcentral/fileexchange/56160-hio-been-hb-imagescramble

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Простой способ шифрования матрицы M:

r = rand(size(M));
[~,ri] = sort(r(:));
M(ri) = M;
0 голосов
/ 08 мая 2018

Самое простое решение для перехода от градаций серого к RGB может быть следующим:

rgbImage = cat(3, grayImage, grayImage, grayImage);

Затем примените вашу функцию из FEX и извлеките один цветовой канал, предполагая, что функция FEX даст три идентичных цветовых канала.

...