Синтаксическая ошибка для прямоугольного изображения - PullRequest
1 голос
/ 18 марта 2011

Имеется изображение X с размером N * M, строка M, столбец N. Есть еще 2 изображения A, B того же размера, что и X. Цель состоит в том, чтобы перемешать строки X со строками, извлеченными из A, и перемешать столбцы X со столбцами, извлеченными из B, что приводит к полностью измененному изображению.

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

X=imread('picture.jpg');
[r c]=size(X);
[dummy,rowscrambleIdx]=sort(A,1);
X_shuffled=X;
[dummy,colscrambleIdx]=sort(B,2);

РЕДАКТИРОВАТЬ : следующий код работает для квадратного изображения, и я хочу сделать аналогичную операцию для изображения прямоугольного размера. Однако этот код не работает для прямоугольного изображения. Я пытался заставить первый код следовать аналогичной логике, но он не работает для неквадратичного RGB-изображения, скажем, 256 * 240 * 3, размер

    X=imread('picture.jpg');

    [dummy,scrambleIdx]=sort(A(:));
    X_shuffled=X;
    X_shuffled(:)=A(scrambleIdx);

%now unscrambling
[dummy,unscrambleIdx] = sort(scrambleIdx);
X_recovered=X;
X_recovered(:)=X_shuffled(unscrambleIdx);

1 Ответ

1 голос
/ 18 марта 2011

Почему бы не использовать randi для случайного создания некоторого числа признаков, которые можно извлечь из А, а некоторых - из В?

Пример:

m=10;
n=5;
A=rand(m,n)
B=ones(m,n)

%3x1 vector of random ints b/w 1 and 10
index=randi([1 10],3,1);

rand_row = A(index,:);
B(index,:)=rand_row

Тогда вывод:

index =

    10
     9
     4

A =

0.9797    0.1174    0.7303    0.6241    0.2619
0.4389    0.2967    0.4886    0.6791    0.3354
0.1111    0.3188    0.5785    0.3955    0.6797
0.2581    0.4242    0.2373    0.3674    0.1366
0.4087    0.5079    0.4588    0.9880    0.7212
0.5949    0.0855    0.9631    0.0377    0.1068
0.2622    0.2625    0.5468    0.8852    0.6538
0.6028    0.8010    0.5211    0.9133    0.4942
0.7112    0.0292    0.2316    0.7962    0.7791
0.2217    0.9289    0.4889    0.0987    0.7150


B =

     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1


B =

    1.0000    1.0000    1.0000    1.0000    1.0000
    1.0000    1.0000    1.0000    1.0000    1.0000
    1.0000    1.0000    1.0000    1.0000    1.0000
    0.2581    0.4242    0.2373    0.3674    0.1366
    1.0000    1.0000    1.0000    1.0000    1.0000
    1.0000    1.0000    1.0000    1.0000    1.0000
    1.0000    1.0000    1.0000    1.0000    1.0000
    1.0000    1.0000    1.0000    1.0000    1.0000
    0.7112    0.0292    0.2316    0.7962    0.7791
    0.2217    0.9289    0.4889    0.0987    0.7150
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...