K-means 处理 RGB 图像

来源:互联网 发布:mac怎么创建压缩文件夹 编辑:程序博客网 时间:2024/06/12 04:04

代码:

clear all;close all;clc;im = imread('yy.jpg');imr = im(:,:,1);img = im(:,:,2);imb = im(:,:,3);[m,n] = size(imr);% set the parametersk = 4;tic;[mur,outlabelr,Jr] = dckmeans(imr,k,40);[mug,outlabelg,Jg] = dckmeans(img,k,40);[mub,outlabelb,Jb] = dckmeans(imb,k,40);toc;% get mumu = [mur;    mug;    mub];for i = 1:m    for j = 1:n        outim(i,j,1) = mu(1,outlabelb(i,j));        outim(i,j,2) = mu(2,outlabelb(i,j));        outim(i,j,3) = mu(3,outlabelb(i,j));    endendfigure, imshow(im);figure, imshow(uint8(outim));


其中dckmeans为:
function [mu,outlabel,J] = dckmeans(im,k,N)copyim = im;%im = im + 1;% set the parameters[m,n] = size(im);% initializationmu = zeros(1,k);for i = 1 : k    mu(i) = 255./i;endh = zeros(1,max(im(:)));y = zeros(1,max(im(:)));l = length(h);for i= 1:m    for j=1:n        h(im(i,j)) = h(im(i,j))+1;    endend% start the iterationfor r = 1:N    for i = 1:l        for j = 1:k            delta(j) = abs( i - mu(j));        end            minloc = find(delta == min(delta));            y(i) = minloc(1);    end    %    for j = 1:k        a = find(y==j);        mu(j) = sum(a.*h(a))./sum(h(a));    end    %    J(r) = 0;    for i = 1:l        J(r) =  J(r) + abs( i - mu(y(i))).*h(i);    end    %if(J(r)-J(r-1)<J(r)*0.000001)    %    break;    %endendfigure,plot(1:length(J),J);% Outputoutlabel= zeros(m,n);for i =1:m    for j= 1:n        outlabel(i,j) = y(copyim(i,j)+1);    endend




0 0
原创粉丝点击