转自:http://blog.sina.com.cn/s/blog_679fbbcf01013pt9.html
一般来说,图片的每个一细节都是由一个小的像素块组成的,如果将其无限放大,每个像素块就会很明显地表现出来,就是我们说的马赛克。马赛克算法很简单,就是把一张图片分割成若干个val * val像素的小区块(可能在边缘有零星的小块,但不影响整体算法,val越大,马赛克效果越明显),每个小区块的颜色都是相同的。而利用Matlab中的放大和缩小函数imresize,可以方便的实现图像的马赛克效果。具体方法为,首先将图片缩小到原图片大小的1/5,再将图片放大五倍还原到原来的大小。由于图片缩小后,部分像素值会丢失,再次放大时就会出现模糊现象,即为马赛克。
代码:
% --------------------------------------------------------------------
%
% --------------------------------------------------------------------
function m_special_mask_Callback(hObject, eventdata, handles)
% hObject
% eventdata
% handles
pix_grp = 5;
global img_src
height = size(img_src,1);
width = size(img_src,2);
mosaic = imresize(img_src,[floor(height/pix_grp) floor(width/pix_grp)]);
%B = imresize(A, [numrows numcols]) 将图像A放大,numrows和numcols分别指定目标图像的高度和宽度
mosaic = imresize(mosaic,[height width],'nearest');
axes(handles.axes_dst);
img_src=mosaic;
imshow(img_src);
set(handles.text,'String','马赛克')