作者dm33 ()
看板MATLAB
标题Re: [问题] 蒙太奇
时间Thu Dec 29 12:13:10 2005
三个流程:
1.载入小图库,缩小截图取得平均色阶..
缩小有很多种方式,在此我用以下的方式
我是切区块,算出区块平均色阶,然後依平均色阶再输出颜色,即为缩小
例如:图片 640x480
切割区块大小 10X10
然後以每 10X10 区块,计算此区块平均色阶并记录之,换言之,
最後会得到一个 64X48 之区块平阶均色阶,然後依每个色阶输出颜色点
即得到一个64X48的新图片,也就是说缩小十倍。
在此截图为 20X20
2.主图片切割,求得平均色阶。
上一点会用那个方法,主要是延用在此一功能,上一点主要是得到新的图片
而此点,主要求得 64X48 之区块平阶均色阶阵列。
3.小图输出至大图
依照大图的 64X48 的色阶阵列,与小图20X20 的整张平均色阶,做比较,
在此是以 mask的方式 把小图的平均色阶,平移至与大图色阶阵列的每一点
值一致,然後再进行输出。
64X48 个点,与每个小图 20X20 做输出後,最後就是得到一张 1280X960
的蒙太奇效应之图片
道理其实不会难,就是要写的时候比较麻烦,拿纸笔画一画会比较清楚写作。
ps..计算平均色阶
两种方式,一种就是全部加起来再除全部的点数
第二种就是计算色阶分布,然後依分布乘上分布值再除全部点数
以下提供我的片段写作(第二种方式)
=============================================
dourect = size(imblok,1)*size(imblok,2);
hR = zeros(1,256); %色阶分布
hG = zeros(1,256); %色阶分布
hB = zeros(1,256); %色阶分布
blockR = imblok(:,:,1);
blockG = imblok(:,:,2);
blockB = imblok(:,:,3);
aodblock = zeros(1,3);
%%计算色阶分布
for k = 1: dourect
hR(blockR(k)+1) = hR(blockR(k)+1) + 1;
hG(blockG(k)+1) = hG(blockG(k)+1) + 1;
hB(blockB(k)+1) = hB(blockB(k)+1) + 1;
end
%%计算平均色阶
for k = 1: 256
aodblock(1) = aodblock(1) + k*hR(k);
aodblock(2) = aodblock(2) + k*hG(k);
aodblock(3) = aodblock(3) + k*hB(k);
end
aodblock(1) = aodblock(1)/dourect;
aodblock(2) = aodblock(2)/dourect;
aodblock(3) = aodblock(3)/dourect;
=============================================
http://0rz.net/c90We
(缩小看会比较看得出来)
http://0rz.net/a40Xg
(原图)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.67.105.122