2014-11-23 2 views
0

입력이 이미지 인 경우 내 출력은 원본 이미지의 뒤섞이거나 뒤죽박죽 된 이미지 여야합니다. 이미지를 하위 블록으로 나누고 그 영역을 개별적으로 스크램블 할 필요가 없습니다. 한 번에 전체 이미지를 스크램블 할 수 있습니다. MATLAB에서 어떻게 이것을 할 수 있습니까?이미지를 엉망으로 만드는 방법?

+2

도움을 받으려면 '뒤죽박죽'이 무엇인지 구체적으로 설명해야합니다. –

+1

[this] (http://codegolf.stackexchange.com/a/35011)과 같은 것입니까? –

+0

또한 다음 문장은 저와 모순됩니다. 1. 영역으로 나눌 필요가없고 * 2 * 전체 이미지를 스크래블해야합니다. *. –

답변

1

이미지에 임의로 픽셀을 다시 배열하는 것이 "스크램블 된"것이라면 이미지의 총 픽셀 수만큼의 임의 순열 벡터를 만들 수 있습니다. 이미지와 크기가 같으면 인덱스로이 이미지를 사용하십시오. 특히이 작업을 수행하려면 randperm을 사용하십시오. 예를 들어, cameraman.tif을 MATLAB 시스템 경로의 일부로 사용합시다. 이런 식으로 뭔가를 수행

당신이 하려는 경우
im = imread('cameraman.tif'); 
vec = randperm(numel(im)); 
vec = reshape(vec, size(im)); 
out = im(vec); 

는 스크램블링 취소, vec는 픽셀이 원래의 이미지로 다시 매핑해야하는 곳의 열 - 주요 지표가 포함되어 있습니다. 따라서 단순히 빈 이미지를 할당 한 다음 vec을 사용하여이 빈 이미지에 색인을 붙이고 out을 복사하십시오. 이 작업은 스크램블 된 이미지의 위치를 ​​취하여 vec에 의해 인덱싱 된 위치로 다시 복사하는 것입니다. 이것은 기본적으로 우리가 전에했던 스크램블을 취소합니다. 따라서 :

reconstruct = zeros(size(im), class(im)); 
reconstruct(vec) = out; 

이 원본 이미지 :

enter image description here

이 같은 스크램블 이미지가 모습입니다! 물론 시끄러운 보이는

enter image description here

... 그리고 내가 적어도 그렇게 생각해.

enter image description here


이미지를 스크램블링 및 언 스크램블링의 핵심은 randperm에 의해 생성하는 벡터를 가지고있다 : 재건함으로써,이 같은 이미지가 보이는 것입니다. 당신이 이것을 가지고 있지 않다면, 원래의 이미지를 재구성 할 방법이 없습니다.

행운을 빈다.

관련 문제