版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Gavin__Zhou/article/details/47175675 这次就介绍下如何对一幅数字图像进行数学上的相关处理,实质就是对矩阵进行数学运算,以求一幅图像的灰度图的最大灰度、最小灰度和平均灰度值和图像的马赛克为例。 首先将图像读入进来:
代码语言:javascript复制>> f = imread('C:UsersAdministratorDesktop1.jpg');
>> imshow(f)
将原始的图像转换为灰度图并获得大小:
代码语言:javascript复制>> gray = rgb2gray(f);
>> [rows,cols]=size(gray);
对矩阵进行运算获得相关的值:
代码语言:javascript复制for i = 1:rows
for j = 1:cols
if gray(i,j) > max
max = gray(i,j);
end
if gray(i,j) < min
min = gray(i,j);
end
avg = avg gray(i,j);
end
end
%输出最大最小和平均值
max
min
avg = avg/(rows*cols)
生成马赛克图像我参考的是这个,原理就是对邻域像素平均值赋给邻域中的所有像素,代码是直接粘过来的。
代码语言:javascript复制clear all; close all;clc;
img=imread('C:UsersAdministratorDesktop1.jpg');
img = rgb2gray(img);
imshow(img,[]);
[h,w]=size(img);
imgn=zeros(h,w);
n=12;
nw=floor(w/n)*n;
nh=floor(h/n)*n;
for y=1:n:nh
for x=1:n:nw
imgn(y:y n-1,x:x n-1)=mean(mean(img(y:y n-1,x:x n-1)));
end
imgn(y:y n-1,nw 1:w)=mean(mean(img(y:y n-1,nw 1:w))); %处理最后一列
imgn(y,1:w)=128;
end
for x=1:n:nw
imgn(nh 1:h,x:x n-1)=mean(mean(img(nh 1:h,x:x n-1))); %处理最后一行
imgn(1:h,x)=128;
end
imgn(nh 1:h,nw 1:w)=mean(mean(img(nh 1:h,nw 1:w))); %处理最后一个角
imgn(1:h,nw)=128;
imgn(1:h,w)=128;
imgn(nh,1:w)=128;
imgn(h,1:w)=128;
figure;imshow(imgn,[])
下面介绍个简单实现马赛克图像的方法,就是对图形进行缩小再放大回原来的大小(或者缩小放大调换),则会产生像素点的丢失,视觉效果就像马赛克
代码语言:javascript复制IMG = imread('C:UsersAdministratorDesktop1.jpg');
pix_grp = 10; %此数值越大马赛克效果越明显
[widt,height,deep] = size(IMG);
mosaic = imresize(IMG,[floor(height/pix_grp) floor(widt/pix_grp)]); %缩小图像
mosaic = imresize(mosaic,[widt,height],'nearest'); %放大图像
imshow(mosaic);