功能将12bitts 图像采用Matlab窗口显示调用示例dither_12to8_play(o_img, 16, 60, 2);1 dither_12to8_playfunctiondither_12to8_play(img_uint16,numFrames,fps,screenIndex)% DITHER_12TO8_PLAY 在指定屏幕上循环播放 Dither 效果%% 输入% img_uint16 - 输入图像矩阵uint1612bit有效数据0~4095% numFrames - 时间抖动帧数默认 16% fps - 播放帧率默认 60% screenIndex - 屏幕索引默认 2第二屏ifnargin2,numFrames16;endifnargin3,fps60;endifnargin4,screenIndex2;endifsize(img_uint16,3)1img_uint16repmat(img_uint16,[113]);end[H,W,~]size(img_uint16);bayer16generate_bayer16()/256;% --- 获取指定屏幕的位置 ---monitorsget(0,MonitorPositions);ifscreenIndexsize(monitors,1)warning(指定屏幕不存在使用主屏);screenIndex1;endposmonitors(screenIndex,:);% --- 创建 figure ---figfigure(Units,pixels,...Position,pos,...MenuBar,none,...ToolBar,none,...DockControls,off,...NumberTitle,off,...Name,,...Color,black);axaxes(Parent,fig,...Units,normalized,...Position,[0011]);axis(ax,off);set(ax,Toolbar,[]);% --- 循环播放直到窗口关闭 ---whileishandle(fig)forf1:numFramesif~ishandle(fig)break;% 窗口关闭退出内层循环endshiftmod(f-1,16);bayerShiftedcircshift(bayer16,[shift,shift]);bayerTiledrepmat(bayerShifted,ceil(H/16),ceil(W/16));bayerTiledbayerTiled(1:H,1:W);img_ditheredzeros(H,W,3,uint8);forc1:3srcdouble(img_uint16(:,:,c));srcmin(src,4080);remaindermod(src,16);need_ditherremainder~0;basefloor(src/16);basemin(base,255);dither_amountremainder/16;valbase(bayerTileddither_amount);valval.*need_ditherbase.*~need_dither;valmax(0,min(255,val));img_dithered(:,:,c)uint8(val);endimage(ax,img_dithered);axis(ax,image);axis(ax,off);drawnow;pause(1/fps);endendend%% --- 子函数 ---functionBgenerate_bayer16()Bzeros(16,16);B(1:8,1:8)generate_bayer8()*4;B(1:8,9:16)generate_bayer8()*42;B(9:16,1:8)generate_bayer8()*43;B(9:16,9:16)generate_bayer8()*41;endfunctionBgenerate_bayer8()B[0328402341042;4816562450185826;12444361446638;6028522062305422;3351143133941;5119592749175725;15477391345537;6331552361295321];end
阅读完成 · 觉得有帮助?