1、原圖:
2、有效區域:
3、matlab代碼:
close all;clear;clc
%讀取原圖檔
img=imread('fisheye.jpg');
%設定灰階門檻值
T=40;
%轉為灰階圖檔
img_gray=rgb2gray(img);
%提取原圖大小
[m,n,k]=size(img_gray);
%從上向下掃描
for i=1:m
flag=0;
for j=1:n
if(img_gray(i,j)>=T)
if(img_gray(i+1,j)>=T)
top=i;
flag=1;
break;
end
end
end
if flag==1
break;
end
end
%從下向上掃描
for i=m:-1:1
flag=0;
for j=1:n
if(img_gray(i,j)>=T)
if(img_gray(i-1,j)>=T)
bottom=i;
flag=1;
break;
end
end
end
if flag==1
break;
end
end
%從左向右掃描
for j=1:n
flag=0;
for i=top:bottom
if(img_gray(i,j)>=T)
if(img_gray(i,j+1)>=T)
left=j;
flag=1;
break;
end
end
end
if flag==1
break;
end
end
%從右向左掃描
for j=n:-1:1
flag=0;
for i=top:bottom
if(img_gray(i,j)>=T)
if(img_gray(i,j-1)>=T)
right=j;
flag=1;
break;
end
end
end
if flag==1
break;
end
end
%計算魚眼圖像有效區域半徑
R=max((right-left)/2,(bottom-top)/2);
%生成有效區域内新的魚眼圖像
img_valid=imcrop(img,[left,top,2*R,2*R]);
%儲存有效區域圖檔
imwrite(img_valid,'img_valid.jpg');
%顯示圖檔
figure(1);imshow(img);
figure(2);imshow(img_valid);
4、python+opencv代碼:
# -*- coding: utf-8 -*-
from __future__ import division
import cv2
#讀取魚眼圖檔
img = cv2.imread("fisheye.jpg")
#設定灰階門檻值
T = 40
#轉換為灰階圖檔
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#提取原圖大小
rows,cols = img.shape[:2]
print rows,cols
#從上向下掃描
for i in range(0,rows,1):
for j in range(0,cols,1):
if img_gray[i,j] >= T:
if img_gray[i + 1,j] >= T:
top = i
break
else:
continue
break
print 'top =',top
#從下向上掃描
for i in range(rows-1,-1,-1):
for j in range(0,cols,1):
if img_gray[i,j] >= T:
if img_gray[i - 1,j] >= T:
bottom = i
break
else:
continue
break
print 'bottom =',bottom
#從左向右掃描
for j in range(0,cols,1):
for i in range(top,bottom,1):
if img_gray[i,j] >= T:
if img_gray[i,j + 1] >= T:
left = j
break
else:
continue
break
print 'left =',left
#從右向左掃描
for j in range(cols-1,-1,-1):
for i in range(top,bottom,1):
if img_gray[i,j] >= T:
if img_gray[i,j - 1] >= T:
right = j
break
else:
continue
break
print 'right =',right
#計算有效區域半徑
R = max((bottom - top) / 2,(right - left) / 2)
print 'R =',R
#提取有效區域
img_valid = img[top:top + 2 * R,left:left + 2 * R]
cv2.imwrite('fisheye_valid.jpg',img_valid)
#顯示圖檔
cv2.imshow('fisheye',img)
cv2.imshow("fisheye_valid",img_valid)
cv2.waitKey(0)
cv2.destroyAllWindows()