matlab处理制作图钉画数据

Ddcc 2018年7月23日 11:14 1021916684@qq.com
matlab 图钉画 距离分类

如需转载请注明出处:http://zczzxz.top,整理不易请谅解。     

 输入的图像为630*1022,然后7*7的矩阵模糊(取这个矩阵的均值代表这个矩阵),然后按照color的矩阵分配颜色。分配颜色的时候使用了分类器,具体的步骤为计算这个点的颜色与color颜色矩阵中各个颜色的距离,将这个点的颜色确定为距离最近的颜色点。输出为图像的RGB值。为了方便阅读,代码有点冗余。

matlab代码如下:


clear all; close all;clc;
img=imread('lena4.jpg');  %输入的图像为630*1022=13140, 7*7的矩阵像素模糊
% imshow(img,[]);
[h w,d]=size(img);
n=7;
nw=fix(w/n)*n;
nh=fix(h/n)*n;
xx=fix(w/n)
yy=fix(h/n)
zz =xx*yy
%%%7*7的矩阵像素模糊
for y=1:n:nh
    for x=1:n:nw
          imgn(y:y+n-1, x:x+n-1, 1)=uint8(mean(mean(img(y:y+n-1, x:x+n-1, 1))));
          imgn(y:y+n-1, x:x+n-1, 2)=uint8(mean(mean(img(y:y+n-1, x:x+n-1, 2))));
          imgn(y:y+n-1, x:x+n-1, 3)=uint8(mean(mean(img(y:y+n-1, x:x+n-1, 3))));
    end
end
%%%获得实际的图片效果
for y=1:1:yy
    for x=1:1:xx
          imgnn(y, x, 1)=uint8(mean(mean(img(y*n, x*n, 1))));
          imgnn(y, x, 2)=uint8(mean(mean(img(y*n, x*n, 2))));
          imgnn(y, x, 3)=uint8(mean(mean(img(y*n, x*n, 3))));
    end
end
clear imgn img
imgnnn = imgnn;
imgnnn = im2double(imgnnn);
%%%减少颜色的处理   小麦色 浅灰色 淡蓝色,这里可以按照实际的颜色作调整,不过,要做归一化(0-255)->(0-1)
color = [0 1 0; 0 0 1; 1 0 0; 0 1 1; 1 0 1; 1 1 0; 0 0 0; 1 1 1; 0.96 0.87 0.7; 0.86 0.86 0.86; 0.53 0.81 0.98; 0.98 0.94 0.9];
colorsize = size(color, 1);
distances = zeros(1, colorsize);
for y=1:1:yy
        for x=1:1:xx
                for z=1:1:colorsize
                    distance = (imgnnn(y, x, 1) - color(z, 1)).^2 + (imgnnn(y, x, 2) - color(z, 2)).^2 + (imgnnn(y, x, 3) - color(z, 3)).^2;
                    distances(1, z) = distance^(1/3);
                end
                colorposition = find(distances== min(min(distances)));
                imgnn(y, x, 1)=uint8(color(colorposition(1, 1), 1)*255);
                imgnn(y, x, 2)=uint8(color(colorposition(1, 1), 2)*255);
                imgnn(y, x, 3)=uint8(color(colorposition(1, 1), 3)*255);
        end
end
%%%显示图片
figure(1)
imshow(imgnn);


最终的显示结果: