matlab点化图片

img

你好同学,这个比较容易的:
代码供参考


I = imread('a.jpg'); % a.jpg是图像文件,放在当前文件夹下面
% imshow(I);
[p,q,~] = size(I);
nspot = 10000; % 圆的个数
i = randi([1,p], nspot,1);
j = randi([1,q], nspot,1);
r = randi([5,20], nspot,1); % 圆的最大半径是20,最小半径5
[m,n] = meshgrid(1:p,1:q);
I = double(I);
for t = 1:1:nspot
    i1 = i(t);
    j1 = j(t);
    r1 = r(t);
    idx = (m-i1).^2 + (n-j1).^2 <=r1^2;
    i2 = m(idx);
    j2 = n(idx);
    R = 0;
    G = 0;
    B = 0;
    for t1 = 1:numel(i2) %求总的rgb
        R = R+I(i2(t1), j2(t1), 1);
        G = G+I(i2(t1), j2(t1), 2);
        B = B+I(i2(t1), j2(t1), 3);
    end
    R = R/numel(i2); % RGB平均
    G = G/numel(i2);
    B = B/numel(i2);
    
    for t1 = 1:numel(i2)
        I(i2(t1), j2(t1), 1) = R; % 平均后赋值
        I(i2(t1), j2(t1), 2) = G;
        I(i2(t1), j2(t1), 3) = B;
    end
    
end
I = uint8(I);
imshow(I)

给个效果:

img

img