how to scramble pixels of specific part of image

1 次查看(过去 30 天)
Can anyone suggest a way to scramble all the pixels within a circle of an image?
I am using this code to scramble all the pixels within an image:
img=imread(SpecificStimuli);
rmig=reshape(img,[],size(img,3));
n=size(rmig,1);
simg=rmig(randperm(n),:);
simg=reshape(simg,size(img));
imwrite(simg, OutputName);
But, rather than scrambling all the pixels I would like to only scramble the pixels within this oval of the original image:
Radius=608; Centered at: Center Row=676 Center Column=642

回答(1 个)

DGM
DGM 2024-7-2
Consider the example:
% an image
inpict = imread('peppers.png');
% generate a mask using any appropriate method
% see also imellipse(), drawellipse()
sz = size(inpict,1:3);
points = makeoval(75,[180 250],-135); % attached
mask = poly2mask(points(:,1),points(:,2),sz(1),sz(2));
mask = repmat(mask,[1 1 sz(3)]); % expand the mask
% get the masked pixels as a Mx3 color table, shuffle it
extractedCT = reshape(inpict(mask),[],sz(3));
extractedCT = extractedCT(randperm(size(extractedCT,1)),:);
% compose the output image
outpict = inpict;
outpict(mask) = extractedCT;
% show it
imshow(outpict)
Might want to be specific when you say "oval'. Someone might guess that you mean "strictly an ellipse", but I don't think many people would think you actually meant "circle".

标签

产品


版本

R2016b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by