{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2026-04-16T00:12:35.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2026-04-16T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":667,"title":"Image Processing 01: Vignetting Correction","description":"The task is to correct image files for IR scanning sensors that due to errant tolerancing and structural instability have varying partially vignetted(V) images. Fortunately the V artifact is in a converging ray bundle and only the edges are impacted to differing amounts. Also, fortunately the sensor has a Low source flat field calibration target that can be used to determine the Nearfield(NF) for each image. The obscuration varies cross-scan but is constant for all samples. The NF varies with the structure temperature. To repair the optics in the drones is cost prohibitive. Fortuitously, the Image Processing is based on Matlab and needs only a fast function to perform an In-Scene image adjustment good enough for govt work.\r\n\r\nOutput: Fixed image(Fimg) (Array \u003c= 512x512 of type double)\r\n\r\nInput: Corrupted Image file(Cimg) (double); Low Signal NF_Cal (1xncol)\r\n\r\nTolerance: Good enough is 1%+1 count of Truth (Timg)\r\n\r\nAssume Ideal LCal file where the center is a DC offset, not Vignetting.\r\n\r\nLCal provides V Offset. Obscuration: Max is 25% at edge, Min 8 columns wide.\r\n\r\nCorrupted Image creation: Start with Truth (Timg)\r\n\r\nCImg = Timg(1-Obscuration)+ NF_Vignetting\r\n\r\nexample: \r\nObs = [.25 .1 0...0 .1 .25]; NF_V [50 20 0...0 20 50]; \r\n\r\nload penny.mat;\r\nTimg=double(P);\r\n\r\nCimg=Timg.*repmat(1-Obs,128,1)+repmat(NF_V,128,1);\r\n\r\nNF_Cal=NF_V+5;% NF_Cal [55 25 5 5...5 25 55]\r\n\r\n       ","description_html":"\u003cp\u003eThe task is to correct image files for IR scanning sensors that due to errant tolerancing and structural instability have varying partially vignetted(V) images. Fortunately the V artifact is in a converging ray bundle and only the edges are impacted to differing amounts. Also, fortunately the sensor has a Low source flat field calibration target that can be used to determine the Nearfield(NF) for each image. The obscuration varies cross-scan but is constant for all samples. The NF varies with the structure temperature. To repair the optics in the drones is cost prohibitive. Fortuitously, the Image Processing is based on Matlab and needs only a fast function to perform an In-Scene image adjustment good enough for govt work.\u003c/p\u003e\u003cp\u003eOutput: Fixed image(Fimg) (Array \u0026lt;= 512x512 of type double)\u003c/p\u003e\u003cp\u003eInput: Corrupted Image file(Cimg) (double); Low Signal NF_Cal (1xncol)\u003c/p\u003e\u003cp\u003eTolerance: Good enough is 1%+1 count of Truth (Timg)\u003c/p\u003e\u003cp\u003eAssume Ideal LCal file where the center is a DC offset, not Vignetting.\u003c/p\u003e\u003cp\u003eLCal provides V Offset. Obscuration: Max is 25% at edge, Min 8 columns wide.\u003c/p\u003e\u003cp\u003eCorrupted Image creation: Start with Truth (Timg)\u003c/p\u003e\u003cp\u003eCImg = Timg(1-Obscuration)+ NF_Vignetting\u003c/p\u003e\u003cp\u003eexample: \r\nObs = [.25 .1 0...0 .1 .25]; NF_V [50 20 0...0 20 50];\u003c/p\u003e\u003cp\u003eload penny.mat;\r\nTimg=double(P);\u003c/p\u003e\u003cp\u003eCimg=Timg.*repmat(1-Obs,128,1)+repmat(NF_V,128,1);\u003c/p\u003e\u003cp\u003eNF_Cal=NF_V+5;% NF_Cal [55 25 5 5...5 25 55]\u003c/p\u003e","function_template":"function out_image = Vignette_fix(in_image,NF_Cal)\r\n  out_image = in_image;\r\nend","test_suite":"%%\r\n% High Image Signal : Vignetted Image Appears Normal\r\n load penny.mat;\r\n Timg=double(P); % P is Matlab demo file upon load\r\n Timg=Timg+200;\r\n [nr nc]=size(Timg);\r\n%  rmin=min(Timg(:));\r\n%  rmax=max(Timg(:));\r\n%  figure(1);imagesc(Timg,[rmin rmax]);colormap gray;axis equal\r\n offset=zeros(1,nc);\r\n obscuration=offset;\r\n \r\n widthL=20;\r\n widthR=15;\r\n maxobsL=.20;\r\n maxobsR=.15;\r\n % ObscurationLinear \r\n obscuration(1:1+widthL)=maxobsL*(widthL-(0:widthL))/widthL;\r\n obscuration(end:-1:end-widthR)=maxobsR*(widthR-(0:widthR))/widthR;\r\n \r\n% Create a Low Signal NF only\r\n LowSig=30;\r\n VignetteSig=200;\r\n \r\n NF_V=VignetteSig*obscuration;\r\n LCal=NF_V+LowSig;\r\n%  figure(2),plot(LCal)\r\n \r\n Cimg=Timg.*repmat((1-obscuration),nr,1)+repmat(NF_V,nr,1);\r\n% figure(3);imagesc(Cimg,[rmin rmax]);colormap gray;axis equal\r\n\r\nFimg=Vignette_fix(Cimg,LCal);\r\n\r\n%Perform Tolerance Check\r\ntolerance=[0.01 1];\r\n Pass=1;\r\n % Hi check\r\n tcheck=(Timg*(1+tolerance(1))+tolerance(2))-Fimg;\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\n % Lo check\r\n tcheck=Fimg-(Timg*(1-tolerance(1))-tolerance(2));\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\nassert(isequal(Pass,1))\r\n%%\r\n% Low Image Signal : Typical Vignette Positive Edges\r\n load penny.mat;\r\n Timg=double(P);\r\n Timg=Timg+50;\r\n [nr nc]=size(Timg);\r\n%  rmin=min(Timg(:));\r\n%  rmax=max(Timg(:));\r\n%  figure(1);imagesc(Timg,[rmin rmax]);colormap gray;axis equal\r\n offset=zeros(1,nc);\r\n obscuration=offset;\r\n \r\n widthL=24;\r\n widthR=16;\r\n maxobsL=.16;\r\n maxobsR=.20;\r\n % ObscurationLinear \r\n obscuration(1:1+widthL)=maxobsL*(widthL-(0:widthL))/widthL;\r\n obscuration(end:-1:end-widthR)=maxobsR*(widthR-(0:widthR))/widthR;\r\n \r\n% Create a Low Signal NF only\r\n LowSig=30;\r\n VignetteSig=600;\r\n \r\n NF_V=VignetteSig*obscuration;\r\n LCal=NF_V+LowSig;\r\n% figure(2),plot(LCal)\r\n \r\n Cimg=Timg.*repmat((1-obscuration),nr,1)+repmat(NF_V,nr,1);\r\n% figure(3);imagesc(Cimg,[rmin rmax]);colormap gray;axis equal\r\n\r\n\r\n% Execute\r\nFimg=Vignette_fix(Cimg,LCal);\r\n\r\n%Perform Tolerance Check\r\ntolerance=[0.01 1];\r\n Pass=1;\r\n % Hi check\r\n tcheck=(Timg*(1+tolerance(1))+tolerance(2))-Fimg;\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\n % Lo check\r\n tcheck=Fimg-(Timg*(1-tolerance(1))-tolerance(2));\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\nassert(isequal(Pass,1))\r\n%%\r\n% Low Image Signal : Typical Vignette Positive Edges\r\n load penny.mat;\r\n Timg=double(P);\r\n Timg=Timg+50;\r\n [nr nc]=size(Timg);\r\n%  rmin=min(Timg(:));\r\n%  rmax=max(Timg(:));\r\n%  figure(1);imagesc(Timg,[rmin rmax]);colormap gray;axis equal\r\n offset=zeros(1,nc);\r\n obscuration=offset;\r\n \r\n widthL=16;\r\n widthR=12;\r\n maxobsL=.08;\r\n maxobsR=.12;\r\n % ObscurationLinear \r\n obscuration(1:1+widthL)=maxobsL*(widthL-(0:widthL))/widthL;\r\n obscuration(end:-1:end-widthR)=maxobsR*(widthR-(0:widthR))/widthR;\r\n \r\n% Create a Low Signal NF only\r\n LowSig=30;\r\n VignetteSig=600;\r\n \r\n NF_V=VignetteSig*obscuration;\r\n LCal=NF_V+LowSig;\r\n% figure(2),plot(LCal)\r\n \r\n Cimg=Timg.*repmat((1-obscuration),nr,1)+repmat(NF_V,nr,1);\r\n% figure(3);imagesc(Cimg,[rmin rmax]);colormap gray;axis equal\r\n\r\n\r\n% Execute\r\nFimg=Vignette_fix(Cimg,LCal);\r\n%Perform Tolerance Check\r\ntolerance=[0.01 1];\r\n Pass=1;\r\n % Hi check\r\n tcheck=(Timg*(1+tolerance(1))+tolerance(2))-Fimg;\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\n % Lo check\r\n tcheck=Fimg-(Timg*(1-tolerance(1))-tolerance(2));\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\nassert(isequal(Pass,1))\r\n%%\r\n% High Signal : Negative Edge Appearance\r\n load penny.mat;\r\n Timg=double(P);\r\n Timg=Timg+800;\r\n [nr nc]=size(Timg);\r\n%  rmin=min(Timg(:));\r\n%  rmax=max(Timg(:));\r\n%  figure(1);imagesc(Timg,[rmin rmax]);colormap gray;axis equal\r\n offset=zeros(1,nc);\r\n obscuration=offset;\r\n \r\n widthL=16;\r\n widthR=14;\r\n maxobsL=.08;\r\n maxobsR=.18;\r\n % ObscurationLinear \r\n obscuration(1:1+widthL)=maxobsL*(widthL-(0:widthL))/widthL;\r\n obscuration(end:-1:end-widthR)=maxobsR*(widthR-(0:widthR))/widthR;\r\n \r\n% Create a Low Signal NF only\r\n LowSig=30;\r\n VignetteSig=600;\r\n \r\n NF_V=VignetteSig*obscuration;\r\n LCal=NF_V+LowSig;\r\n% figure(2),plot(LCal)\r\n \r\n Cimg=Timg.*repmat((1-obscuration),nr,1)+repmat(NF_V,nr,1);\r\n% figure(3);imagesc(Cimg,[rmin rmax]);colormap gray;axis equal\r\n\r\n\r\n% Execute\r\nFimg=Vignette_fix(Cimg,LCal);\r\n%Perform Tolerance Check\r\ntolerance=[0.01 1];\r\n Pass=1;\r\n % Hi check\r\n tcheck=(Timg*(1+tolerance(1))+tolerance(2))-Fimg;\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\n % Lo check\r\n tcheck=Fimg-(Timg*(1-tolerance(1))-tolerance(2));\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\nassert(isequal(Pass,1))\r\n%%\r\nTimg = double(imread('concordorthophoto.png')); % Matlab full image\r\n Timg=Timg(1:512,1:512);\r\n Timg=Timg+400; % Nominal 20\r\n [nr nc]=size(Timg);\r\n%  rmin=min(Timg(:));\r\n%  rmax=max(Timg(:));\r\n%  figure(1);imagesc(Timg,[rmin rmax]);colormap gray;axis equal\r\n offset=zeros(1,nc);\r\n obscuration=offset;\r\n \r\n widthL=48;\r\n widthR=40;\r\n maxobsL=.2; % chan 1 Vig = 0.1842\r\n maxobsR=.15; % Chan 512 Vig = 0.1359\r\n % Obscuration 4th order \r\n obscuration(1:1+widthL)=maxobsL*(((1:1+widthL)-(1+widthL)).^4/(widthL+1)^4);\r\n obscuration(end-widthR:end)=maxobsR*(((widthR+1:-1:1)-(1+widthR)).^4/(widthR+1)^4);\r\n \r\n% Create a Low Signal NF only\r\n LowSig=30;\r\n VignetteSig=1500;\r\n \r\n NF_V=VignetteSig*obscuration;\r\n LCal=NF_V+LowSig;\r\n% figure(2),plot(LCal)\r\n \r\n Cimg=Timg.*repmat((1-obscuration),nr,1)+repmat(NF_V,nr,1);\r\n% figure(3);imagesc(Cimg,[rmin rmax]);colormap gray;axis equal\r\n\r\n\r\n% Execute\r\nFimg=Vignette_fix(Cimg,LCal);\r\n%Perform Tolerance Check\r\ntolerance=[0.01 1];\r\n Pass=1;\r\n % Hi check\r\n tcheck=(Timg*(1+tolerance(1))+tolerance(2))-Fimg;\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\n % Lo check\r\n tcheck=Fimg-(Timg*(1-tolerance(1))-tolerance(2));\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\nassert(isequal(Pass,1))\r\n%%\r\n Timg = double(imread('concordorthophoto.png')); % Matlab full image\r\n Timg=Timg(1600:2111,900:1411);\r\n Timg=Timg+300;\r\n [nr nc]=size(Timg);\r\n%  rmin=min(Timg(:));\r\n%  rmax=max(Timg(:));\r\n%  figure(1);imagesc(Timg,[rmin rmax]);colormap gray;axis equal\r\n offset=zeros(1,nc);\r\n obscuration=offset;\r\n \r\n widthL=42;\r\n widthR=36;\r\n maxobsL=.18; % \r\n maxobsR=.23; % \r\n % Obscuration Linear \r\n obscuration(1:1+widthL)=maxobsL*(widthL-(0:widthL))/widthL;\r\n obscuration(end:-1:end-widthR)=maxobsR*(widthR-(0:widthR))/widthR;\r\n \r\n% Create a Low Signal NF only\r\n LowSig=50;\r\n VignetteSig=1200;\r\n \r\n NF_V=VignetteSig*obscuration;\r\n LCal=NF_V+LowSig;\r\n %figure(2),plot(LCal)\r\n \r\n Cimg=Timg.*repmat((1-obscuration),nr,1)+repmat(NF_V,nr,1);\r\n %figure(3);imagesc(Cimg,[rmin rmax]);colormap gray;axis equal\r\n\r\n% Execute\r\nFimg=Vignette_fix(Cimg,LCal);\r\n%Perform Tolerance Check\r\ntolerance=[0.01 1];\r\n Pass=1;\r\n % Hi check\r\n tcheck=(Timg*(1+tolerance(1))+tolerance(2))-Fimg;\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\n % Lo check\r\n tcheck=Fimg-(Timg*(1-tolerance(1))-tolerance(2));\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\nassert(isequal(Pass,1))","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-06T00:26:06.000Z","updated_at":"2012-05-08T00:55:47.000Z","published_at":"2012-05-08T00:49:45.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe task is to correct image files for IR scanning sensors that due to errant tolerancing and structural instability have varying partially vignetted(V) images. Fortunately the V artifact is in a converging ray bundle and only the edges are impacted to differing amounts. Also, fortunately the sensor has a Low source flat field calibration target that can be used to determine the Nearfield(NF) for each image. The obscuration varies cross-scan but is constant for all samples. The NF varies with the structure temperature. To repair the optics in the drones is cost prohibitive. Fortuitously, the Image Processing is based on Matlab and needs only a fast function to perform an In-Scene image adjustment good enough for govt work.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOutput: Fixed image(Fimg) (Array \u0026lt;= 512x512 of type double)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput: Corrupted Image file(Cimg) (double); Low Signal NF_Cal (1xncol)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTolerance: Good enough is 1%+1 count of Truth (Timg)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAssume Ideal LCal file where the center is a DC offset, not Vignetting.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eLCal provides V Offset. Obscuration: Max is 25% at edge, Min 8 columns wide.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCorrupted Image creation: Start with Truth (Timg)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCImg = Timg(1-Obscuration)+ NF_Vignetting\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eexample: Obs = [.25 .1 0...0 .1 .25]; NF_V [50 20 0...0 20 50];\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eload penny.mat; Timg=double(P);\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCimg=Timg.*repmat(1-Obs,128,1)+repmat(NF_V,128,1);\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNF_Cal=NF_V+5;% NF_Cal [55 25 5 5...5 25 55]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":667,"title":"Image Processing 01: Vignetting Correction","description":"The task is to correct image files for IR scanning sensors that due to errant tolerancing and structural instability have varying partially vignetted(V) images. Fortunately the V artifact is in a converging ray bundle and only the edges are impacted to differing amounts. Also, fortunately the sensor has a Low source flat field calibration target that can be used to determine the Nearfield(NF) for each image. The obscuration varies cross-scan but is constant for all samples. The NF varies with the structure temperature. To repair the optics in the drones is cost prohibitive. Fortuitously, the Image Processing is based on Matlab and needs only a fast function to perform an In-Scene image adjustment good enough for govt work.\r\n\r\nOutput: Fixed image(Fimg) (Array \u003c= 512x512 of type double)\r\n\r\nInput: Corrupted Image file(Cimg) (double); Low Signal NF_Cal (1xncol)\r\n\r\nTolerance: Good enough is 1%+1 count of Truth (Timg)\r\n\r\nAssume Ideal LCal file where the center is a DC offset, not Vignetting.\r\n\r\nLCal provides V Offset. Obscuration: Max is 25% at edge, Min 8 columns wide.\r\n\r\nCorrupted Image creation: Start with Truth (Timg)\r\n\r\nCImg = Timg(1-Obscuration)+ NF_Vignetting\r\n\r\nexample: \r\nObs = [.25 .1 0...0 .1 .25]; NF_V [50 20 0...0 20 50]; \r\n\r\nload penny.mat;\r\nTimg=double(P);\r\n\r\nCimg=Timg.*repmat(1-Obs,128,1)+repmat(NF_V,128,1);\r\n\r\nNF_Cal=NF_V+5;% NF_Cal [55 25 5 5...5 25 55]\r\n\r\n       ","description_html":"\u003cp\u003eThe task is to correct image files for IR scanning sensors that due to errant tolerancing and structural instability have varying partially vignetted(V) images. Fortunately the V artifact is in a converging ray bundle and only the edges are impacted to differing amounts. Also, fortunately the sensor has a Low source flat field calibration target that can be used to determine the Nearfield(NF) for each image. The obscuration varies cross-scan but is constant for all samples. The NF varies with the structure temperature. To repair the optics in the drones is cost prohibitive. Fortuitously, the Image Processing is based on Matlab and needs only a fast function to perform an In-Scene image adjustment good enough for govt work.\u003c/p\u003e\u003cp\u003eOutput: Fixed image(Fimg) (Array \u0026lt;= 512x512 of type double)\u003c/p\u003e\u003cp\u003eInput: Corrupted Image file(Cimg) (double); Low Signal NF_Cal (1xncol)\u003c/p\u003e\u003cp\u003eTolerance: Good enough is 1%+1 count of Truth (Timg)\u003c/p\u003e\u003cp\u003eAssume Ideal LCal file where the center is a DC offset, not Vignetting.\u003c/p\u003e\u003cp\u003eLCal provides V Offset. Obscuration: Max is 25% at edge, Min 8 columns wide.\u003c/p\u003e\u003cp\u003eCorrupted Image creation: Start with Truth (Timg)\u003c/p\u003e\u003cp\u003eCImg = Timg(1-Obscuration)+ NF_Vignetting\u003c/p\u003e\u003cp\u003eexample: \r\nObs = [.25 .1 0...0 .1 .25]; NF_V [50 20 0...0 20 50];\u003c/p\u003e\u003cp\u003eload penny.mat;\r\nTimg=double(P);\u003c/p\u003e\u003cp\u003eCimg=Timg.*repmat(1-Obs,128,1)+repmat(NF_V,128,1);\u003c/p\u003e\u003cp\u003eNF_Cal=NF_V+5;% NF_Cal [55 25 5 5...5 25 55]\u003c/p\u003e","function_template":"function out_image = Vignette_fix(in_image,NF_Cal)\r\n  out_image = in_image;\r\nend","test_suite":"%%\r\n% High Image Signal : Vignetted Image Appears Normal\r\n load penny.mat;\r\n Timg=double(P); % P is Matlab demo file upon load\r\n Timg=Timg+200;\r\n [nr nc]=size(Timg);\r\n%  rmin=min(Timg(:));\r\n%  rmax=max(Timg(:));\r\n%  figure(1);imagesc(Timg,[rmin rmax]);colormap gray;axis equal\r\n offset=zeros(1,nc);\r\n obscuration=offset;\r\n \r\n widthL=20;\r\n widthR=15;\r\n maxobsL=.20;\r\n maxobsR=.15;\r\n % ObscurationLinear \r\n obscuration(1:1+widthL)=maxobsL*(widthL-(0:widthL))/widthL;\r\n obscuration(end:-1:end-widthR)=maxobsR*(widthR-(0:widthR))/widthR;\r\n \r\n% Create a Low Signal NF only\r\n LowSig=30;\r\n VignetteSig=200;\r\n \r\n NF_V=VignetteSig*obscuration;\r\n LCal=NF_V+LowSig;\r\n%  figure(2),plot(LCal)\r\n \r\n Cimg=Timg.*repmat((1-obscuration),nr,1)+repmat(NF_V,nr,1);\r\n% figure(3);imagesc(Cimg,[rmin rmax]);colormap gray;axis equal\r\n\r\nFimg=Vignette_fix(Cimg,LCal);\r\n\r\n%Perform Tolerance Check\r\ntolerance=[0.01 1];\r\n Pass=1;\r\n % Hi check\r\n tcheck=(Timg*(1+tolerance(1))+tolerance(2))-Fimg;\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\n % Lo check\r\n tcheck=Fimg-(Timg*(1-tolerance(1))-tolerance(2));\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\nassert(isequal(Pass,1))\r\n%%\r\n% Low Image Signal : Typical Vignette Positive Edges\r\n load penny.mat;\r\n Timg=double(P);\r\n Timg=Timg+50;\r\n [nr nc]=size(Timg);\r\n%  rmin=min(Timg(:));\r\n%  rmax=max(Timg(:));\r\n%  figure(1);imagesc(Timg,[rmin rmax]);colormap gray;axis equal\r\n offset=zeros(1,nc);\r\n obscuration=offset;\r\n \r\n widthL=24;\r\n widthR=16;\r\n maxobsL=.16;\r\n maxobsR=.20;\r\n % ObscurationLinear \r\n obscuration(1:1+widthL)=maxobsL*(widthL-(0:widthL))/widthL;\r\n obscuration(end:-1:end-widthR)=maxobsR*(widthR-(0:widthR))/widthR;\r\n \r\n% Create a Low Signal NF only\r\n LowSig=30;\r\n VignetteSig=600;\r\n \r\n NF_V=VignetteSig*obscuration;\r\n LCal=NF_V+LowSig;\r\n% figure(2),plot(LCal)\r\n \r\n Cimg=Timg.*repmat((1-obscuration),nr,1)+repmat(NF_V,nr,1);\r\n% figure(3);imagesc(Cimg,[rmin rmax]);colormap gray;axis equal\r\n\r\n\r\n% Execute\r\nFimg=Vignette_fix(Cimg,LCal);\r\n\r\n%Perform Tolerance Check\r\ntolerance=[0.01 1];\r\n Pass=1;\r\n % Hi check\r\n tcheck=(Timg*(1+tolerance(1))+tolerance(2))-Fimg;\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\n % Lo check\r\n tcheck=Fimg-(Timg*(1-tolerance(1))-tolerance(2));\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\nassert(isequal(Pass,1))\r\n%%\r\n% Low Image Signal : Typical Vignette Positive Edges\r\n load penny.mat;\r\n Timg=double(P);\r\n Timg=Timg+50;\r\n [nr nc]=size(Timg);\r\n%  rmin=min(Timg(:));\r\n%  rmax=max(Timg(:));\r\n%  figure(1);imagesc(Timg,[rmin rmax]);colormap gray;axis equal\r\n offset=zeros(1,nc);\r\n obscuration=offset;\r\n \r\n widthL=16;\r\n widthR=12;\r\n maxobsL=.08;\r\n maxobsR=.12;\r\n % ObscurationLinear \r\n obscuration(1:1+widthL)=maxobsL*(widthL-(0:widthL))/widthL;\r\n obscuration(end:-1:end-widthR)=maxobsR*(widthR-(0:widthR))/widthR;\r\n \r\n% Create a Low Signal NF only\r\n LowSig=30;\r\n VignetteSig=600;\r\n \r\n NF_V=VignetteSig*obscuration;\r\n LCal=NF_V+LowSig;\r\n% figure(2),plot(LCal)\r\n \r\n Cimg=Timg.*repmat((1-obscuration),nr,1)+repmat(NF_V,nr,1);\r\n% figure(3);imagesc(Cimg,[rmin rmax]);colormap gray;axis equal\r\n\r\n\r\n% Execute\r\nFimg=Vignette_fix(Cimg,LCal);\r\n%Perform Tolerance Check\r\ntolerance=[0.01 1];\r\n Pass=1;\r\n % Hi check\r\n tcheck=(Timg*(1+tolerance(1))+tolerance(2))-Fimg;\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\n % Lo check\r\n tcheck=Fimg-(Timg*(1-tolerance(1))-tolerance(2));\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\nassert(isequal(Pass,1))\r\n%%\r\n% High Signal : Negative Edge Appearance\r\n load penny.mat;\r\n Timg=double(P);\r\n Timg=Timg+800;\r\n [nr nc]=size(Timg);\r\n%  rmin=min(Timg(:));\r\n%  rmax=max(Timg(:));\r\n%  figure(1);imagesc(Timg,[rmin rmax]);colormap gray;axis equal\r\n offset=zeros(1,nc);\r\n obscuration=offset;\r\n \r\n widthL=16;\r\n widthR=14;\r\n maxobsL=.08;\r\n maxobsR=.18;\r\n % ObscurationLinear \r\n obscuration(1:1+widthL)=maxobsL*(widthL-(0:widthL))/widthL;\r\n obscuration(end:-1:end-widthR)=maxobsR*(widthR-(0:widthR))/widthR;\r\n \r\n% Create a Low Signal NF only\r\n LowSig=30;\r\n VignetteSig=600;\r\n \r\n NF_V=VignetteSig*obscuration;\r\n LCal=NF_V+LowSig;\r\n% figure(2),plot(LCal)\r\n \r\n Cimg=Timg.*repmat((1-obscuration),nr,1)+repmat(NF_V,nr,1);\r\n% figure(3);imagesc(Cimg,[rmin rmax]);colormap gray;axis equal\r\n\r\n\r\n% Execute\r\nFimg=Vignette_fix(Cimg,LCal);\r\n%Perform Tolerance Check\r\ntolerance=[0.01 1];\r\n Pass=1;\r\n % Hi check\r\n tcheck=(Timg*(1+tolerance(1))+tolerance(2))-Fimg;\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\n % Lo check\r\n tcheck=Fimg-(Timg*(1-tolerance(1))-tolerance(2));\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\nassert(isequal(Pass,1))\r\n%%\r\nTimg = double(imread('concordorthophoto.png')); % Matlab full image\r\n Timg=Timg(1:512,1:512);\r\n Timg=Timg+400; % Nominal 20\r\n [nr nc]=size(Timg);\r\n%  rmin=min(Timg(:));\r\n%  rmax=max(Timg(:));\r\n%  figure(1);imagesc(Timg,[rmin rmax]);colormap gray;axis equal\r\n offset=zeros(1,nc);\r\n obscuration=offset;\r\n \r\n widthL=48;\r\n widthR=40;\r\n maxobsL=.2; % chan 1 Vig = 0.1842\r\n maxobsR=.15; % Chan 512 Vig = 0.1359\r\n % Obscuration 4th order \r\n obscuration(1:1+widthL)=maxobsL*(((1:1+widthL)-(1+widthL)).^4/(widthL+1)^4);\r\n obscuration(end-widthR:end)=maxobsR*(((widthR+1:-1:1)-(1+widthR)).^4/(widthR+1)^4);\r\n \r\n% Create a Low Signal NF only\r\n LowSig=30;\r\n VignetteSig=1500;\r\n \r\n NF_V=VignetteSig*obscuration;\r\n LCal=NF_V+LowSig;\r\n% figure(2),plot(LCal)\r\n \r\n Cimg=Timg.*repmat((1-obscuration),nr,1)+repmat(NF_V,nr,1);\r\n% figure(3);imagesc(Cimg,[rmin rmax]);colormap gray;axis equal\r\n\r\n\r\n% Execute\r\nFimg=Vignette_fix(Cimg,LCal);\r\n%Perform Tolerance Check\r\ntolerance=[0.01 1];\r\n Pass=1;\r\n % Hi check\r\n tcheck=(Timg*(1+tolerance(1))+tolerance(2))-Fimg;\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\n % Lo check\r\n tcheck=Fimg-(Timg*(1-tolerance(1))-tolerance(2));\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\nassert(isequal(Pass,1))\r\n%%\r\n Timg = double(imread('concordorthophoto.png')); % Matlab full image\r\n Timg=Timg(1600:2111,900:1411);\r\n Timg=Timg+300;\r\n [nr nc]=size(Timg);\r\n%  rmin=min(Timg(:));\r\n%  rmax=max(Timg(:));\r\n%  figure(1);imagesc(Timg,[rmin rmax]);colormap gray;axis equal\r\n offset=zeros(1,nc);\r\n obscuration=offset;\r\n \r\n widthL=42;\r\n widthR=36;\r\n maxobsL=.18; % \r\n maxobsR=.23; % \r\n % Obscuration Linear \r\n obscuration(1:1+widthL)=maxobsL*(widthL-(0:widthL))/widthL;\r\n obscuration(end:-1:end-widthR)=maxobsR*(widthR-(0:widthR))/widthR;\r\n \r\n% Create a Low Signal NF only\r\n LowSig=50;\r\n VignetteSig=1200;\r\n \r\n NF_V=VignetteSig*obscuration;\r\n LCal=NF_V+LowSig;\r\n %figure(2),plot(LCal)\r\n \r\n Cimg=Timg.*repmat((1-obscuration),nr,1)+repmat(NF_V,nr,1);\r\n %figure(3);imagesc(Cimg,[rmin rmax]);colormap gray;axis equal\r\n\r\n% Execute\r\nFimg=Vignette_fix(Cimg,LCal);\r\n%Perform Tolerance Check\r\ntolerance=[0.01 1];\r\n Pass=1;\r\n % Hi check\r\n tcheck=(Timg*(1+tolerance(1))+tolerance(2))-Fimg;\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\n % Lo check\r\n tcheck=Fimg-(Timg*(1-tolerance(1))-tolerance(2));\r\n if min(tcheck(:))\u003c0,Pass=0;end\r\nassert(isequal(Pass,1))","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-06T00:26:06.000Z","updated_at":"2012-05-08T00:55:47.000Z","published_at":"2012-05-08T00:49:45.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe task is to correct image files for IR scanning sensors that due to errant tolerancing and structural instability have varying partially vignetted(V) images. Fortunately the V artifact is in a converging ray bundle and only the edges are impacted to differing amounts. Also, fortunately the sensor has a Low source flat field calibration target that can be used to determine the Nearfield(NF) for each image. The obscuration varies cross-scan but is constant for all samples. The NF varies with the structure temperature. To repair the optics in the drones is cost prohibitive. Fortuitously, the Image Processing is based on Matlab and needs only a fast function to perform an In-Scene image adjustment good enough for govt work.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOutput: Fixed image(Fimg) (Array \u0026lt;= 512x512 of type double)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput: Corrupted Image file(Cimg) (double); Low Signal NF_Cal (1xncol)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTolerance: Good enough is 1%+1 count of Truth (Timg)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAssume Ideal LCal file where the center is a DC offset, not Vignetting.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eLCal provides V Offset. Obscuration: Max is 25% at edge, Min 8 columns wide.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCorrupted Image creation: Start with Truth (Timg)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCImg = Timg(1-Obscuration)+ NF_Vignetting\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eexample: Obs = [.25 .1 0...0 .1 .25]; NF_V [50 20 0...0 20 50];\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eload penny.mat; Timg=double(P);\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCimg=Timg.*repmat(1-Obs,128,1)+repmat(NF_V,128,1);\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNF_Cal=NF_V+5;% NF_Cal [55 25 5 5...5 25 55]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"term":"tag:\"image processing optics ir in-scene correction\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"image processing optics ir in-scene correction\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"image processing optics ir in-scene correction\"","","\"","image processing optics ir in-scene correction","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f24c0cb70a0\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f24c0cb6920\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f24c0cb52a0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f24c0cb7dc0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f24c0cb7640\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f24c0cb75a0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f24c0cb7140\u003e":"tag:\"image processing optics ir in-scene correction\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f24c0cb7140\u003e":"tag:\"image processing optics ir in-scene correction\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"cody-search","password":"78X075ddcV44","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"image processing optics ir in-scene correction\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"image processing optics ir in-scene correction\"","","\"","image processing optics ir in-scene correction","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f24c0cb70a0\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f24c0cb6920\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f24c0cb52a0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f24c0cb7dc0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f24c0cb7640\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f24c0cb75a0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f24c0cb7140\u003e":"tag:\"image processing optics ir in-scene correction\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f24c0cb7140\u003e":"tag:\"image processing optics ir in-scene correction\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":667,"difficulty_rating":"medium"}]}}