그래서 이미지의 정사각형을 잘라서 스크램블해야하는 코드가 있습니다. 나는 흰색 배경에 일련의 얼굴이 있습니다. 내가하려는 것은 무작위 이미지에서 무작위 정사각형을 가져와 최종 스크램블 이미지에 추가하는 것이지만 해당 정사각형이 흰색이면 아닙니다.
다음은 코드입니다.
%% 먼저 이미지 크기를 가져 와서 30 픽셀 블록으로 나눕니다.
n = 30;
image_size = imread(all_images{1});
mn = floor(size(image_size)/n);
m1 = mn(1);
n1 = mn(2);
% 스크램블 된 블록이 들어갈 새로운 매트릭스
newim = zeros(m1*n,n1*n);
% 파일에 51 개의 이미지가 있습니다.
for bb = 1:51
for k = 1:m1*n1
good_squares = false;
while ~good_squares
current_image = randsample(1:51, 1);
my_image = imread(all_images{current_image});
ind = randperm(m1*n1);
[ind1, ind2] = ind2sub([m1, n1], ind);
[i,j]=ind2sub([m1, n1], k);
newim((i-1)*n+1:i*n, (j-1)*n+1:j*n) = ...
my_image((ind1(k)-1)*n+1:ind1(k)*n,(ind2(k)-1)*n+1:ind2(k)*n);
x = my_image((ind1(k)-1)*n+1:ind1(k)*n,(ind2(k)-1)*n+1:ind2(k)*n);
good_squares = true;
if x(1, 1) == 255 && x(1, 30) == 255 && x(30, 1) == 255
good_squares = false;
elseif x(1, 1) == 255 && x(1, 30) == 255 && x(30, 30) == 255
good_squares = false;
elseif x(30, 1) == 255 && x(30, 30) == 255 && x(1, 30) == 255
good_squares = false;
end
end
end
% write out new mask
imwrite(newim, ['mask' num2str(bb) '.bmp'],'bmp');
end
따라서 코드의 제외 부분 (good_blocks = false)을 실행하는 곳에서 세 모서리의 픽셀이 흰색이면 블록을 제외하려고합니다. 이 코드는 51 개의 순수한 흰색 이미지를 뱉어 내므로 인덱싱이 손상되었거나 while 루프가 올바르지 않습니다. 이를 수행하는 방법에 대한 모든 제안을 부탁드립니다.
나는 당신의 하위 인덱싱 Randomizer에 아무런 문제가 없다고 생각합니다 (비록 이미지가 그레이 스케일이 아닌 경우, 즉 3 차원이있을 때 어떤 일이 발생하는지 생각하는 데 시간을 소비하지 않았습니다).
차라리 흰색이 순수한 흰색이 아니라고 생각하므로 다음과 같이 시도하십시오.
for bb = 1:51
for k = 1:(m1*n1)
good_squares = false;
while ~good_squares
%%...
threshold = 230 % adapt this value to your needs
if any(x < threshold)
good_squares = true;
end
end
end
% write out new mask
%% ...
end
조건은 다음과 같을 수도 있습니다.
threshold_value = 230
threshold_pixelCount = 5
if sum(x < threshold_value) > threshold_pixelCount
good_squares = true;
end
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다