MATLAB: MATLAB 2×2 maximum fill

arraydigital image processingimage processingImage Processing Toolboxmatrix

Hello guys ,
I have a problem.I have an image file and you also know it is matrix.I want to implement 2×2 maximum fill as an image that i upload. I want to search the all 2×2 pixels , finding the maximum value and fill 2×2 area (that we searched) with the maximum value.Can anyone help me. Thank you

Best Answer

Method One: blockproc:
>> ipt = [128,25,12,26;240,200,15,25;128,128,255,15;35,35,35,155]
ipt =
128 25 12 26
240 200 15 25
128 128 255 15
35 35 35 155
>> blk = [2,2];
>> fun = @(s)max(s.data(:))*ones(blk);
>> otp = blockproc(ipt,blk,fun)
otp =
240 240 26 26
240 240 26 26
128 128 255 255
128 128 255 255
Method Two: mat2cell, cellfun, and cell2mat:
>> blk = [2,2];
>> spl = size(ipt)./blk;
>> col = repmat(blk(1),1,spl(1));
>> row = repmat(blk(2),1,spl(2));
>> C = mat2cell(ipt,col,row);
>> foo = @(m)max(m(:))*ones(blk);
>> otp = cell2mat(cellfun(foo,C,'Uni',0))
otp =
240 240 26 26
240 240 26 26
128 128 255 255
128 128 255 255
Method Three: kron and accumarray:
>> blk = [2,2];
>> idx = size(ipt)./blk;
>> idx = reshape(1:prod(idx),idx);
>> idx = kron(idx,ones(blk)); % (repelem also works)
>> vec = accumarray(idx(:),ipt(:),[],@max);
>> otp = vec(idx)
otp =
240 240 26 26
240 240 26 26
128 128 255 255
128 128 255 255
Method Four: reshape, permute, and kron:
>> idx = size(ipt)./blk;
>> tmp = reshape(ipt,blk(1),idx(1),blk(2),idx(2));
>> tmp = permute(tmp,[2,4,1,3]);
>> tmp = max(max(tmp,[],4),[],3);
>> otp = kron(tmp,ones(blk))
otp =
240 240 26 26
240 240 26 26
128 128 255 255
128 128 255 255